看看S#arp Architecture。這是一個包裝NHibernate的框架,併爲您提供了這個功能,以及其他一些功能。您還可以使用Castle Windsor或Ninject等依賴注入容器來執行此操作。 (S#arp使用Castle Windsor)。
如果您想自己做這件事,您需要創建一個HttpModule
以在每個Web請求的開始和結束時爲您打開和關閉會話。在請求開始時,模塊將打開一個會話,並將其存儲在HttpContext.Items
,這是每個Web請求存儲。處理請求時,您的存儲庫將從此處獲取會話。 (對於一個乾淨的設計,創建一個存儲庫使用的接口ISessionManager
,以及一個訪問每個請求存儲的實現,然後它是單元可測試的)。最後,模塊會在請求結束時刷新和關閉會話。我曾經在一個NHibernate項目上做過這樣的工作,雖然它很有教育意義,但它的工作很多。
S#arp是一個很大的框架,它規定了很多應用程序結構。如果你不想走那麼遠的話,看看溫莎城堡,把這些東西乾淨地抽象出來。所有你需要做的(或多或少)是配置容器來實例化存儲庫,每個請求的NHibernate會話對象作爲構造參數。如果你真的想學習如何,建立你自己的HttpModule,但我建議在生產中使用一個框架。
實現的session-per-請求,但它的會話per-(HTTP)請求......爲什麼你要隱藏,從網絡項目? – dotjoe 2012-07-31 18:02:11