我之前曾问过一个问题here,有关HTTP请求结束时autofac不处理对象的问题。我现在认为我有一个更大的问题,因为有证据表明它正在满足SAME对象的请求。同样,我使用的是here指令。我的测试有点复杂,因为我正在使用委托语法创建对象,但是我认为我将其标记为请求生存期。 Global.asax.cs:
protected void Application_Start(object sender, EventArgs e)
{
...
var builder = new Autofac.Builder.ContainerBuilder();
builder.Register<IDBConnectionSelector>(
(c) => new CachingDBConnections(ConstructorArgs...))
.HttpRequestScoped();
var container = builder.Build();
_containerProvider = new ContainerProvider(container);
}
public IContainerProvider ContainerProvider
{
get { return _containerProvider; }
}
static IContainerProvider _containerProvider;
我的目的是注册IDBConnectionSelector以获得使用自定义构造函数但使用HTTP请求范围创建的具体类型CachingDBConnections。
CachingDBConnections对象的某些方法在后续请求上失败,这使我相信我得到的是上次得到的相同方法,而不是每个请求都获得新方法。
那有意义吗?我究竟做错了什么?
最佳答案
在大多数情况下(在任何IoC容器中),您都会发现依赖项链中的一个组件是单例。
例如。
A-> B-> C
如果A是“工厂”,B是“单人”,C是“工厂”,则解析A将获得对单例B的引用,该单例B将始终引用相同的C。
为了在您每次解决A时都能创建新的C,B也必须是“工厂”。
我怎么猜这是问题吗?
缺口