Подтвердить что ты не робот

Решение IContainer

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

4b9b3361

Ответ 1

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

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

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

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