我知道这有点死马,但我没有找到满意的答案。首先让我说,我不是在处理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