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

回答