AutoFac и MVC IControllerActivator нуждаются в контейнере

Я в интересной ситуации; Мне нужно передать IContainer компоненту IControllerActivator, который я определяю, но IControllerActivator должен быть зарегистрирован внутри контейнера. Это связано с тем, что IControllerActivator будет использовать контейнер для создания контроллеров.

Я сохранил контейнер как статическую ссылку из файла global.asax; таким образом, любой зависимый объект (например, мой активатор) в контейнере может ссылаться на него. Поскольку активатор использует контейнер и должен быть зарегистрирован в модуле autofac, есть ли способ определить, что для этого конкретного сопоставления требуется ссылка на контейнер, или я могу зарегистрировать это после создания контейнера?

Каковы мои варианты здесь?

Спасибо.


person Brian Mains    schedule 13.03.2011    source источник


Ответы (1)


Вы можете взять зависимость от IComponentContext:

public Foo(IComponentContext context, ...)

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

Кроме того, вы можете увидеть, соответствует ли какой-либо из типов отношений Autofac вашим потребностям. С этими типами в игре вам редко нужно напрямую ссылаться на IComponentContext. Это избавит ваши классы от непосредственного знания Autofac.

person Bryan Watts    schedule 13.03.2011