Чи можна зареєструвати послугу під час виконання, тобто після того ContainerBuilder, як побудовано та Containerстворено (та ContainerBuilderутилізовано)?
Відповіді:
Так, можна, використовуючи Updateметод на ContainerBuilder:
var newBuilder = new ContainerBuilder();
newBuilder.Register...;
newBuilder.Update(existingContainer);
Оскільки ContainerBuilder.Update застаріло, нова рекомендація полягає у використанні дочірньої сфери дії.
Додавання реєстрацій до довічного обсягу
Autofac дозволяє додавати реєстрації "на льоту" під час створення довічних обсягів. Це може допомогти вам, коли вам потрібно зробити своєрідне обмеження реєстрації з обмеженою реєстрацією, або якщо вам, як правило, потрібні додаткові речі в області, яку ви не хочете реєструвати в усьому світі. Ви робите це, передаючи лямбду в BeginLifetimeScope (), яка бере ContainerBuilder і додає реєстрації.
using(var scope = container.BeginLifetimeScope(
builder =>
{
builder.RegisterType<Override>().As<IService>();
builder.RegisterModule<MyModule>();
}))
{
// The additional registrations will be available
// only in this lifetime scope.
}