Регистрация во время выполнения с Autofac - PullRequest
16 голосов
/ 30 мая 2011

При обсуждении Autofac с коллегой возникла проблема регистрации зависимостей во время выполнения.Например, в Prism сборки часто загружаются во время выполнения, и их зависимости регистрируются в контейнере IoC (обычно Unity).

Как это можно сделать с помощью Autofac?

Из документации Autofac иИз того, что я нашел в сети, похоже, что регистрация выполняется при запуске приложения.Даже когда используются «внешние» сборки, регистрации располагаются в модулях со сборками при запуске приложения.Как мы это делаем после того, как контейнер «собран» при запуске приложения?

(Обратите внимание, что сборка может захотеть добавить зависимости для использования других компонентов в приложении, и поэтому вложенный контейнер может не решить проблему здесь. В связи с этой темой: Unity имеет такие методы, как RegisterIfExists ии тому подобное. Существуют ли эквиваленты Autofac?)

Спасибо!

Ответы [ 2 ]

31 голосов
/ 30 мая 2011

Обновление существующего контейнера Autofac : Вы можете обновить существующий Autofac Container во время выполнения, используя ContainerBuilder.Update(). Следующий пример кода, взятый из поста блога Выпущенный Autofac 2.2 , демонстрирует использование:

var container = // something already built

var updater = new ContainerBuilder();
updater.RegisterType<A>();
updater.Register(c => new B()).As<IB>();

// Add the registrations to the container
updater.Update(container);

Интеграция с Autofac и Prism : Вопрос Что такое статус интеграции Prism в Autofac? также может быть полезным для вас.

2 голосов
/ 04 декабря 2018

Обновление для Autofac 4.8.1.0

ContainerBuilder.Update метод помечен как Obsolete с комментарием:
Контейнеры обычно следует считать неизменяемыми. Зарегистрируйте все ваши зависимости перед построением / разрешением. Если вам нужно изменить содержимое контейнера, технически вам следует перестроить контейнер. Этот метод может быть удален в будущем основном выпуске.

...