我之前问过一个关于autofac在here请求结束时不处理我的对象的问题。我现在认为我有一个更大的问题,因为有证据表明它正在提供相同的对象请求到请求。再一次,我使用了他们的指令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 request作用域的具体类型CachingDBConnections。
CachingDBConnections对象的一些方法在后续请求中失败,这让我相信我得到的是与上次相同的方法,而不是每个请求都有一个新的方法。
这有意义吗?我做错了什么?
发布于 2009-09-03 17:55:52
我想通了!
我向错误的容器请求对象实例--我向应用程序容器请求对象,而不是请求容器。
哦!
发布于 2009-09-03 17:50:21
大多数情况下(在任何IoC容器中),您会发现依赖链上的一个组件是单例的。
例如。
A -> B -> C
如果A是“factory”,B是“singleton”,C是“factory”,那么解析A将获得对单例B的引用,它将始终引用相同的C。
为了在每次解析A时创建一个新的C,B也必须是“工厂”。
我怎么猜的?这就是问题所在吗?
尼克
https://stackoverflow.com/questions/1374196
复制相似问题