Разрешить IContainer - PullRequest
       10

Разрешить IContainer

62 голосов
/ 06 января 2011

Каков предлагаемый способ получения контейнера Autofac из класса в приложении? Предоставляет ли Autofac разрешение свойства IContainer для класса или мне нужно хранить контейнер глобально после его создания?

1 Ответ

99 голосов
/ 06 января 2011

Для большинства целей вам понадобится IComponentContext или ILifetimeScope.Они автоматически предоставляются Autofac, поэтому все, что вам нужно сделать, это взять зависимость (конструктор) от одного из них, и текущий экземпляр будет внедрен.

Оба интерфейса предоставляют стандартные операции Resolve(), тогда как ILifetimeScope расширяет IComponentContext, добавляя методы для запуска новых вложенных времен жизни.

Компоненты, которые хотят использовать службы контейнера для доступа к другим компонентам, должны делать это в своей собственной области, а не в «глобальном»IContainer, чтобы можно было вернуть правильный экземпляр.Например, в HTTP-запросе для текущего запроса будет введен IComponentContext или ILifetimeScope.

Большинство проблем, требующих внедрения контекста, также можно (часто более изящно) преодолеть с помощью типов отношений -см .: http://autofac.readthedocs.org/en/latest/resolve/relationships.html.

...