我正在研究在以前使用Castle Windsor的Web應用程序中使用Autofac。Autofac會話範圍
我真正喜歡Autofac的東西是能夠通過lamda表達式來表達動態組件構造,而不是在Windsor中創建DependancyResolvers等。
我有一個場景是我想要一個特定的組件在ASP.NET會話級作用域註冊。隨着溫莎我會創建/源的新LifestyleManager,但與Autofac我想出了這一點:
//Register SessionContext at HTTP Session Level
builder.Register(c =>
{
HttpContext current = HttpContext.Current;
//HttpContext handes delivering the correct session
Pelagon.Violet.Core.Interfaces.SessionContext instance = current.Session["SessionContext"] as Pelagon.Violet.Core.Interfaces.SessionContext;
if (instance == null)
{
instance = c.Resolve<Pelagon.Violet.Core.Interfaces.SessionContext>();
current.Session["SessionContext"] = instance;
}
return instance;
})
.FactoryScoped();
這在某些時候我也許能變成一個擴展方法。如果HttpContext.Current.Session爲空,我接受此實現將會彈出,因爲它只應用於Web應用程序。
的問題是:
哪些是Autofac這種註冊的最佳實踐。我已經看到很多關於使用嵌套容器等的提及,但沒有具體的例子,並且我很想了解上述方法可能會出現什麼問題(只有我能想到的是自動處理的東西)。
謝謝。
嗨,尼克。感謝您的反饋,關於使用嵌套容器管理Web應用程序中的作用域,您是否知道任何具體示例,即Global.asx文件,這些文件將顯示每個容器的構建和「使用」位置?無法在文檔中看到它。 – crowleym 2009-09-10 09:06:17
不確定它是100%最新的,但這應該有所幫助:http://code.google.com/p/autofac/source/browse/branches/1.4/src/Example/Remember.Web/Global。 asax.cs – 2009-09-11 01:32:14