我处于一个有趣的境地;我需要将IContainer传递给我正在定义的IControllerActivator组件,但IControllerActivator需要在容器内注册。这是因为IControllerActivator将使用容器来构建控制器。
我将容器存储为global.asax文件中的静态引用;这样,容器上的任何依赖对象(如我的激活器)都可以引用它。由于激活器使用容器,并且需要在autofac模块中注册,有没有办法定义这个特定的映射需要对容器的引用,或者我可以在构建容器后注册它吗?
我有什么选择?
感谢。
答案 0 :(得分:3)
您可以依赖IComponentContext
:
public Foo(IComponentContext context, ...)
Autofac容器会自动在此类型下注册自己,使其可供所有组件使用。上下文实例将是解析Foo
的容器,无论是应用程序级别还是请求级别容器。这使您无需了解所引用容器的范围。
或者,您可以查看是否有Autofac relationship types符合您的需求。有了这些类型,您很少需要直接引用IComponentContext
。这使您的课程无需直接了解Autofac。