我正在使用StructureMap,並且我已配置了使用HybridHttpOrLocalThreadStorage
生命週期的ISession。創建新會話並根據請求將其注入到控制器中。適當的會話(RavenDB/NHibernate)處置 - IoC和web應用程序
現在,我的問題是關於處置。我已閱讀了不同方法數量的文章數量。有些人是在控制器上做的,一些在倉庫中,一些在http模塊中,其他人在Application_EndRequest()
處理程序中做。從SRP違規到'創建一個對象應該負責處理'等等的批評不勝枚舉。
因此,底線就是:
- 常用的方法是手工處理這些會議 - 爲什麼?我已經配置了我的容器來管理特定對象的生命週期。它不應該(即IoC)爲我管理它嗎?
- 可供選擇的處理方式是處理它在
Application_EndRequest()
「最好」的方式去處理它?
例如,this article在長度上解釋了一種可用方法,但該文章本身已超過2.5歲。也許StructureMap的新版本會使大部分實現過時?
當HTTP請求結束時,StructureMap應該處理該會話,這是該生命週期的目的。這相當於在Application_EndRequest中處理會話。 – eulerfx
相關:http://stackoverflow.com/questions/10585478/one-dbcontext-per-web-request-why – Steven
@eulerfx:你確定是這種情況嗎?所以,我必須做的就是將Session傳遞給我的控制器,做任何我必須對數據做/做的事情,調用'SaveChanges'並退出,對吧?其餘的是結構圖?在閱讀其他人員在控制器,存儲庫,模塊等中手動處理會話之後,我不太確定。有沒有辦法來驗證? – user981375