1
我想知道如果有人可以建议在上述方案中使用的最好的模式,假设NHibernate的+ Structuremap +的TransactionScope
A)StructureMap被以下列方式使用:
cfg.For<ISession>()
.LifecycleIs(new TransientLifecycle())
.Use(ctx => ctx.GetInstance<ISessionFactory>().OpenSession());
B)我希望在一个TransactionScope中封装的单个控制器操作中对各种服务/存储库的所有方法调用,这意味着如果任何操作出错,那么它们都不应该提交。
我在某处读到会话必须在TransactionScope块内构建,如果这是工作的,在我的情况下,不是通过Structuremap在每个存储库中注入会话。
嗨科尔,我想避免将会话参数传递到服务+存储库级别。此外,回购不应直接从控制器访问。我真的很想找到一种以DI方式进行操作的方法。 – Rok
@Rok我上面描述的一切都使用DI,所以我不确定你的意思。我所建议的是通过创建ISessions的IOC容器提前创建存储库,并使用工厂模式将其留给控制器来创建存储库。通过这种方式,您可以在控制器操作中创建存储库,并在创建ISession时将其注入(在控制器操作中)。 –