AutoFac和MVC IControllerActivator需要容器

时间:2011-03-13 02:11:16

标签: .net asp.net asp.net-mvc autofac asp.net-mvc-3

我处于一个有趣的境地;我需要将IContainer传递给我正在定义的IControllerActivator组件,但IControllerActivator需要在容器内注册。这是因为IControllerActivator将使用容器来构建控制器。

我将容器存储为global.asax文件中的静态引用;这样,容器上的任何依赖对象(如我的激活器)都可以引用它。由于激活器使用容器,并且需要在autofac模块中注册,有没有办法定义这个特定的映射需要对容器的引用,或者我可以在构建容器后注册它吗?

我有什么选择?

感谢。

1 个答案:

答案 0 :(得分:3)

您可以依赖IComponentContext

public Foo(IComponentContext context, ...)

Autofac容器会自动在此类型下注册自己,使其可供所有组件使用。上下文实例将是解析Foo的容器,无论是应用程序级别还是请求级别容器。这使您无需了解所引用容器的范围。

或者,您可以查看是否有Autofac relationship types符合您的需求。有了这些类型,您很少需要直接引用IComponentContext。这使您的课程无需直接了解Autofac。