解决IContainer

sti*_*mms 64 c# dependency-injection inversion-of-control autofac

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

Nic*_*rdt 104

您需要IComponentContextILifetimeScope用于大多数目的.这些是由Autofac自动提供的,因此您需要做的就是对其中一个进行(构造函数)依赖,并注入当前实例.

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

想要使用容器服务访问其他组件的组件需要在自己的范围内而不是"全局" IContainer中这样做,以便可以返回正确的实例.例如,在HTTP请求中,注入IComponentContextILifetimeScope将是当前请求的注入.

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

  • `builder.Register(c => new QueryProcessor(c))`需要是:`builder.Register(c => new QueryProcessor(c.Resolve <IComponentContext>()))` - `c`是一个临时生活在每个操作的基础上.HTH! (9认同)