我之前问了一个问题here,关于autofac在HTTP请求结束时没有处理我的对象。我现在认为我有一个更大的问题,因为有证据表明它正在提供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对象的某些方法在后续请求中失败,导致我相信我得到的是我上次获得的那个,而不是每个请求都是新的。
这有意义吗?我做错了什么?
答案 0 :(得分:2)
大多数情况下(在任何IoC容器中),您会发现依赖链中的一个组件是单个组件。
E.g。
A - &gt; B - &gt; ç
如果A是'工厂',B是'单例'而C是'工厂',那么解析A将获得对单例B的引用,它将始终引用相同的C.
为了在每次解决A时创建新的C,B也必须是“工厂”。
我的猜测怎么样?这是问题吗?
尼克
答案 1 :(得分:1)
我明白了!
我向WRONG容器询问了对象实例 - 我向应用程序容器询问了对象而不是请求容器。
D'哦!