it-swarm-ru.tech

Добавление услуг после того, как контейнер был построен

Можно ли зарегистрировать службу во время выполнения, то есть после того, как ContainerBuilder был создан и Container был создан (и ContainerBuilder был удален)?

77
Paul Knopf

Да, вы можете, используя метод Update для ContainerBuilder:

var newBuilder = new ContainerBuilder();
newBuilder.Register...;

newBuilder.Update(existingContainer);
93
Peter Lillevold

Поскольку 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.
}

Работа с жизненными областями

6
wezzix