2011-10-04 42 views
10

我正在開發一個庫,內部分發給我公司並由各種應用程序使用。這個庫必須是平臺不可知的,因爲它可能被部署在Web上下文中,甚至在控制檯應用程序中。我想註冊對象爲per-http-request或per-thread,這取決於使用此框架的應用程序的上下文。在StructureMap中,我可以使用Hybrid生命週期來做到這一點。從本質上講,如果存在一個HttpContext,那麼該對象將被限定爲該範圍,否則ThreadLocalStorage將以每個線程爲基礎使用。分佈式庫或消費應用程序不需要額外的配置。這可能使用Autofac?鑑於我們開發人員技能水平的多變性,我們的目標是最大限度地減少/消除針對消費者的任何專門配置。自動選擇每個線程或每個請求的生命期範圍

據我所知,註冊可以是上下文無關使用InstancePerLifetimeScope壽命,但隨後消費應用程序都需要消耗ASP.NET/WCF/MVC積分二進制文件,以登記InstancePerLifetimeScope綁定到的HTTP請求。或者,對於每個線程範圍,消費代碼需要負責創建lifetime scope per thread

有什麼建議嗎?

+0

Autofac支持自定義生命週期,難道你不能模仿StructureMap的'Hybrid'生命週期嗎? – neontapir

回答

3

很容易實現自己的生命週期管理器,它將檢查'HttpContext.Current!= null'然後委託給其中一個現有的管理者。

但是,我會建議每個應用程序連接適當的管理器本身。一個例子是一個單元測試場景,其中'HttpContext'可能不存在,因爲它可能是模擬的,你可能想手動控制生命週期以滿足特定的測試目的。

+0

你可以舉一個自定義終身管理者的例子嗎? –

+1

https://github.com/autofac/Autofac/blob/4c5f4ca554137f184cb705035011c3a0261c1128/Core/Source/Autofac.Integration.Mvc/RequestLifetimeScopeProvider.cs –

相關問題