Можно ли зарегистрировать сервис во время выполнения, то есть после того, как 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.
}