我知道这有点像死马,但我找不到满意的答案。首先让我说,我不是在处理Web应用程序,否则管理NH Session非常简单。
我有一堆企业组件。这些组件具有自己的服务层,可以作用于多个存储库。例如:
现在我可能有一个控制台或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();
}
}
答案 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代码。
这将使用新的StructureMap嵌套容器将我的会话范围限定为单个事务中的所有组件。当我开始工作时,我会将代码发布到我的博客并更新此帖子。