[英]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.