2012-08-29 92 views
0

我正在使用StructureMap,並且我已配置了使用HybridHttpOrLocalThreadStorage生命週期的ISession。創建新會話並根據請求將其注入到控制器中。適當的會話(RavenDB/NHibernate)處置 - IoC和web應用程序

現在,我的問題是關於處置。我已閱讀了不同方法數量的文章數量。有些人是在控制器上做的,一些在倉庫中,一些在http模塊中,其他人在Application_EndRequest()處理程序中做。從SRP違規到'創建一個對象應該負責處理'等等的批評不勝枚舉。

因此,底線就是:

  • 常用的方法是手工處理這些會議 - 爲什麼?我已經配置了我的容器來管理特定對象的生命週期。它不應該(即IoC)爲我管理它嗎?
  • 可供選擇的處理方式是處理它在Application_EndRequest()「最好」的方式去處理它?

例如,this article在長度上解釋了一種可用方法,但該文章本身已超過2.5歲。也許StructureMap的新版本會使大部分實現過時?

+1

當HTTP請求結束時,StructureMap應該處理該會話,這是該生命週期的目的。這相當於在Application_EndRequest中處理會話。 – eulerfx

+1

相關:http://stackoverflow.com/questions/10585478/one-dbcontext-per-web-request-why – Steven

+0

@eulerfx:你確定是這種情況嗎?所以,我必須做的就是將Session傳遞給我的控制器,做任何我必須對數據做/做的事情,調用'SaveChanges'並退出,對吧?其餘的是結構圖?在閱讀其他人員在控制器,存儲庫,模塊等中手動處理會話之後,我不太確定。有沒有辦法來驗證? – user981375

回答

2

如果您使用的是RavenDB .net客戶端,您將使用DocumentStore和DocumentSession。這兩個對象都在後臺做了大量的工作。本地緩存提到一件事。爲了保持事情的清潔和高效,每個會話都應在工作完成時調用session.dispose()。應用程序結束時應調用documentStore.Dispose()。

+0

這很清楚。我沒有配置'DocumentStore'(singleton)和'DocumentSession'(每個請求)的問題。我的問題是關於如何在工作完成後正確處置'DocumentSession'。 – user981375

相關問題