来自StructureMap的NHibernate Session DI在组件中

时间:2010-01-22 18:09:22

标签: nhibernate session dependency-injection components ioc-container

我知道这有点像死马,但我找不到满意的答案。首先让我说,我不是在处理Web应用程序,否则管理NH Session非常简单。

我有一堆企业组件。这些组件具有自己的服务层,可以作用于多个存储库。例如:

  • 声明组件
    • 理赔处理服务
    • 声明存储库
  • 结算组件
    • 结算服务
    • 帐单存储库
  • 政策组件
    • PolicyLockService
    • 策略存储库

现在我可能有一个控制台或Windows应用程序需要协调涉及每个服务的操作。我想编写要注入(DI)所需存储库的服务。存储库应该有一个ISession或类似的注入,以便我可以在一个ISession / ITransaction下执行此操作。

我知道工作单元模式和许多样本,但没有一个显示DI。我也对[ThreadStatic]持怀疑态度,因为这些东西也可以在WCF中使用,我找到了足够的帖子来描述如何做到这一点。我已经阅读了有关商务对话的内容,但需要一些简单的东西,因为我们有很多这些应用程序和一些非常缺乏经验的开发人员,因此每个Windows /控制台应用程序都可以轻松引导。

那么如何配置StructureMap以将相同的ISession注入到应用程序的每个依赖存储库中?这是一个完全做作的完全成熟的例子,不使用SM(仅用于说明 - 请不要花费精力批评):

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();


  }

}

2 个答案:

答案 0 :(得分:2)

我终于找到了一些可以帮助一些人的帖子。

首先,与下一篇文章有​​些相关的入门读物: http://blog.coreycoogan.com/2010/05/24/using-structuremap-to-configure-applications-and-components/

现在如何在WCF和NHIbernate中使用SM: http://blog.coreycoogan.com/2010/05/26/structuremap-wcf-nhibernate-part-1/

答案 1 :(得分:0)

我想我现在有一个缺失的难题。 Jeremy D. Miller非常友好地发布了他的ITransactionProcessor代码。

http://codebetter.com/blogs/jeremy.miller/archive/2010/01/06/how-dovetail-uses-structuremap-with-nhibernate.aspx

这将使用新的StructureMap嵌套容器将我的会话范围限定为单个事务中的所有组件。当我开始工作时,我会将代码发布到我的博客并更新此帖子。

http://blog.coreycoogan.com