我之前曾问过一个问题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也必须是“工厂”。

我怎么猜这是问题吗?

缺口

07-24 18:12
查看更多