簡體   English   中英

autofac,ASP.NET集成和HttpRequestScoped

[英]autofac, ASP.NET integration, and HttpRequestScoped

我之前在這里問了一個關於autofac在HTTP請求結束時沒有處理我的對象的問題。 我現在認為我有一個更大的問題,因為有證據表明它正在提供SAME對象請求請求。 我再次在這里使用他們的指示。 我的測試有點復雜,因為我正在使用委托語法來創建一個對象,但我認為我將其標記為請求生命周期。 的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的引用,它將始終引用相同的C.

為了在每次解析A時創建新的C,B也必須是“工廠”。

怎么猜? 這是問題嗎?

缺口

我想到了!

我問WRONG容器的對象實例 - 我問的是對象的應用程序容器,而不是請求容器。

D'哦!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM