从应用程序中的类中获取 Autofac 容器的建议方法是什么?Autofac 是否提供了解析类上的 IContainer 属性的功能,还是需要在构建容器后将其全局存储?
在大多数情况下,您需要 IComponentContext或 ILifetimeScope。这些都是由 Autofac 自动提供的,因此您所需要做的就是在其中一个上获取一个(构造函数)依赖项,然后将注入当前实例。
IComponentContext
ILifetimeScope
这两个接口都提供标准的 Resolve()操作,而 ILifetimeScope通过添加开始新的嵌套生命周期的方法来扩展 IComponentContext。
Resolve()
想要使用容器的服务来访问其他组件的组件需要在它们自己的作用域内(而不是“ global”IContainer)这样做,以便返回正确的实例。例如,在 HTTP 请求中,注入的 IComponentContext或 ILifetimeScope将是当前请求的 IComponentContext或 ILifetimeScope。
IContainer
大多数需要注入上下文的问题也可以(通常更优雅地)通过使用关系类型来克服-参见: http://autofac.readthedocs.org/en/latest/resolve/relationships.html。