asp.net - autofac、ASP.NET 集成和 HttpRequestScoped

标签 asp.net autofac

我之前问过一个问题here关于 autofac 在 HTTP 请求结束时不处理我的对象。我现在认为我有一个更大的问题,因为有证据表明它正在逐个请求地提供相同的对象。再次,我正在使用他们的说明 here 。我的测试有点复杂,因为我使用委托(delegate)语法来创建对象,但我认为我正在将其标记为请求生命周期。 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 也必须是“工厂”。

我的猜测怎么样?这是问题吗?

尼克

关于asp.net - autofac、ASP.NET 集成和 HttpRequestScoped,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1374196/

相关文章:

c# - asp.net/C#中请求的来源

c# - 通过命令行构建和发布 C# .NET Web 应用程序

c# - 使用 Autofac 对委托(delegate)工厂进行单元测试

asp.net-core - FluentValidation 装饰器不适用于 autofac 和 mediator

asp.net - ASP.NET 中自己的 OpenId 服务器的示例代码?

javascript - 如何在javascript中获取用户控件

c# - LINQ to SQL 从字符串创建查询

asp.net-mvc - IHubContext SignalR MVC 的 Autofac 注入(inject)

c# - 多接口(interface)装饰器——Autofac 中的循环依赖之谜

c# - Autofac 约束绑定(bind)