2011-03-13 28 views
0

我处于一个有趣的情况;我需要将IContainer传递给我定义的IControllerActivator组件,但IControllerActivator需要在容器中注册。这是因为IControllerActivator将使用容器来构建控制器。AutoFac和MVC IControllerActivator需要集装箱

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

我在这里有什么选择?

谢谢。

回答

3

您可以采取IComponentContext依赖:

public Foo(IComponentContext context, ...) 

Autofac容器自动注册自己这个类型下,使其可用于所有组件。上下文实例将是Foo已解析的容器,无论它是应用程序级还是请求级容器。这可以减少您需要了解您所引用容器的范围。

或者,您可以查看是否有任何Autofac relationship types满足您的需求。使用这些类型时,您很少需要直接参考IComponentContext。这可以让您的课程免于Autofac的直接知识。