Добавление услуг после того, как контейнер был построен - PullRequest
77 голосов
/ 15 февраля 2011

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

Ответы [ 2 ]

93 голосов
/ 15 февраля 2011

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

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

newBuilder.Update(existingContainer);
6 голосов
/ 20 марта 2018

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

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

...