我知道這有點死馬,但我沒有找到滿意的答案。首先讓我說,我不是在處理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();
}
}
您可以通過在structuremap配置使用AsSingleton做到這一點,但您可能不希望爲整個應用程序使用一個會話。 – Paco 2010-01-22 18:32:56
正確,我不想每個應用程序使用一個。 – 2010-01-22 19:09:07
我已經讀過Jeremy D. Millers發表過100次在Dovetail上使用NH的文章,認爲有些東西需要嵌套容器,但是我無法找到太多的東西來幫助包裹我的頭。 – 2010-01-22 20:35:57