1

我知道這有點死馬,但我沒有找到滿意的答案。首先讓我說,我不是在處理Web應用程序,否則管理NH Session非常簡單。組件結構圖中的NHibernate會話DI

我有一堆企業組件。這些組件具有自己的服務層,它將作用於多個存儲庫。例如:

  • 權利要求元器件
    • 要求處理服務
    • 權利要求庫
  • 計費組件
    • 帳單服務
    • 帳單信息庫
  • 策略組件
    • PolicyLockService
    • 策略庫

現在我可以有一個控制檯,或Windows應用程序,需要協調涉及的每一項服務的操作。我想編寫要注入的服務(DI)他們所需的存儲庫。存儲庫應該有一個ISession或類似的注入,以便我可以在一個ISession/ITransaction下執行此操作。

我知道工作單元模式和許多樣本,但沒有一個顯示DI。我也對[ThreadStatic]持懷疑態度,因爲這些東西也可以從WCF中使用,並且我找到了足夠的帖子來描述如何做到這一點。我已閱讀關於商業會話,但需要一些簡單的東西,每個Windows /控制檯應用程序可以輕鬆引導,因爲我們有這些應用程序和一些非常缺乏經驗的開發人員。

那麼如何配置StructureMap以將相同的ISession從應用程序注入到每個依賴存儲庫中?下面是不使用SM一個完全人爲的和完全是編造的例子(澄清唯一的 - 請不要花費精力critisizing):

ConsoleApplication

Main 
{ 

    using(ISession session = GetSession()) 
    using(ITransaction trans = session.BeginTransaction()) 
    { 
    var policyRepo = new PolicyRepo(session); 
    var policyService = new PolicyService(policyRepo); 

    var billingRepo = new BillingRepo(session) 
    var billingService = new BillingService(billingRepo); 

    var claimRepo = new ClaimsRepo(session); 

    var claimService = new ClaimService(claimRepo, policyService, billingService); 

    claimService.FileCLaim(); 

    trans.Commit(); 


    } 

} 
+0

您可以通過在structuremap配置使用AsSingleton做到這一點,但您可能不希望爲整個應用程序使用一個會話。 – Paco 2010-01-22 18:32:56

+0

正確,我不想每個應用程序使用一個。 – 2010-01-22 19:09:07

+0

我已經讀過Jeremy D. Millers發表過100次在Dovetail上使用NH的文章,認爲有些東西需要嵌套容器,但是我無法找到太多的東西來幫助包裹我的頭。 – 2010-01-22 20:35:57

回答