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