首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >autofac、ASP.NET集成和HttpRequestScoped

autofac、ASP.NET集成和HttpRequestScoped
EN

Stack Overflow用户
提问于 2009-09-03 15:35:27
回答 2查看 743关注 0票数 3

我之前问过一个关于autofac在here请求结束时不处理我的对象的问题。我现在认为我有一个更大的问题,因为有证据表明它正在提供相同的对象请求到请求。再一次,我使用了他们的指令here。我的测试有点复杂,因为我使用委托语法来创建一个对象,但我认为我将它标记为请求生存期。Global.asax.cs:

代码语言:javascript
运行
复制
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对象的一些方法在后续请求中失败,这让我相信我得到的是与上次相同的方法,而不是每个请求都有一个新的方法。

这有意义吗?我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-03 17:55:52

我想通了!

我向错误的容器请求对象实例--我向应用程序容器请求对象,而不是请求容器。

哦!

票数 1
EN

Stack Overflow用户

发布于 2009-09-03 17:50:21

大多数情况下(在任何IoC容器中),您会发现依赖链上的一个组件是单例的。

例如。

A -> B -> C

如果A是“factory”,B是“singleton”,C是“factory”,那么解析A将获得对单例B的引用,它将始终引用相同的C。

为了在每次解析A时创建一个新的C,B也必须是“工厂”。

我怎么猜的?这就是问题所在吗?

尼克

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1374196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档