解决 IContainer

从应用程序中的类中获取 Autofac 容器的建议方法是什么?Autofac 是否提供了解析类上的 IContainer 属性的功能,还是需要在构建容器后将其全局存储?

36202 次浏览

在大多数情况下,您需要 IComponentContextILifetimeScope。这些都是由 Autofac 自动提供的,因此您所需要做的就是在其中一个上获取一个(构造函数)依赖项,然后将注入当前实例。

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

想要使用容器的服务来访问其他组件的组件需要在它们自己的作用域内(而不是“ global”IContainer)这样做,以便返回正确的实例。例如,在 HTTP 请求中,注入的 IComponentContextILifetimeScope将是当前请求的 IComponentContextILifetimeScope

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