2009-09-03 64 views
3

我以前問一個問題here有關HTTP請求結束時autofac不處置我的對象。我現在認爲我有一個更大的問題,becuasse有證據表明它正在提供SAME對象請求請求。再次,我正在使用他們的說明here。我的測試有點複雜,因爲我使用委託語法來創建一個對象,但我想我將它標記爲請求生命期。的Global.asax.cs:autofac中,ASP.NET集成和HttpRequestScoped

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對象的某些方法在後續請求中失敗,導致我相信我得到的是我上次得到的同一個請求,而不是每個請求的新請求。

這有道理嗎?我究竟做錯了什麼?

+1

,如果它的確與衆不同,但我想這個註冊您的服務不知道:builder.Register( C =>新CachingDBConnections(ConstructorArgs ...)) 。至於()HttpRequestScoped(); – 2009-09-03 16:34:49

+0

該語法更有意義,但結果相同。更多挖掘我猜 - 感謝信息! – n8wrl 2009-09-03 16:54:00

回答

1

我想通了!

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

D'oh!

2

大部分發生這種情況(在任何IoC容器)的時候,你會發現,沿着依賴關係鏈中的一個組成部分是一個單。

E.g.

A - >乙 - 「ç

如果A是 '工廠',B是 '單' 和C是 '工廠',則解析將獲得的單乙一個參考,這將始終引用同樣C.

爲了獲得創建每次你解決時間一個新的C,B也必須是「工廠」。

我的猜測如何?這是問題嗎?

尼克

+0

嗨尼古拉斯!非常感謝您辦理登機手續。我找到了答案併發布了我的答案。 – n8wrl 2009-09-03 17:56:56