解决IContainer

时间:2011-01-05 21:25:20

标签: c# dependency-injection inversion-of-control autofac

从应用程序中的类中获取Autofac容器的建议方法是什么? Autofac是否允许在类上解析IContainer属性,或者我是否需要在构建容器后将其全局存储?

1 个答案:

答案 0 :(得分:99)

出于大多数目的,您需要IComponentContextILifetimeScope。这些是由Autofac自动提供的,所以你需要做的就是对它们中的一个采用(构造函数)依赖,然后注入当前实例。

两个接口都提供标准的Resolve()操作,而ILifetimeScope通过添加启动新嵌套生存期的方法来扩展IComponentContext

希望使用容器服务访问其他组件的组件需要在自己的范围内进行,而不是“全局”IContainer,以便可以返回正确的实例。例如。在HTTP请求中,注入的IComponentContextILifetimeScope将是当前请求的注释。

使用关系类型可以(通常更优雅地)克服需要注入上下文的大多数问题 - 请参阅:http://autofac.readthedocs.org/en/latest/resolve/relationships.html