从应用程序中的类中获取Autofac容器的建议方法是什么? Autofac是否允许在类上解析IContainer属性,或者我是否需要在构建容器后将其全局存储?
答案 0 :(得分:99)
出于大多数目的,您需要IComponentContext
或ILifetimeScope
。这些是由Autofac自动提供的,所以你需要做的就是对它们中的一个采用(构造函数)依赖,然后注入当前实例。
两个接口都提供标准的Resolve()
操作,而ILifetimeScope
通过添加启动新嵌套生存期的方法来扩展IComponentContext
。
希望使用容器服务访问其他组件的组件需要在自己的范围内进行,而不是“全局”IContainer
,以便可以返回正确的实例。例如。在HTTP请求中,注入的IComponentContext
或ILifetimeScope
将是当前请求的注释。
使用关系类型可以(通常更优雅地)克服需要注入上下文的大多数问题 - 请参阅:http://autofac.readthedocs.org/en/latest/resolve/relationships.html。