Чи можна зареєструвати послугу під час виконання, тобто після того 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.
}