在ASP中使用数据库事务.NET MVC3与Ninject DI



我开始了一个新项目,想把事情做得比以前更好。我用温莎做DI,但效果不太好。我一直在考虑使用NuGet Ninject MVC 3包来照顾DI。

我在谷歌上搜索了好几个小时,发现了很多关于Ninject的有用建议(尤其是喜欢过滤器DI的东西),但没有什么真正回答下面的燃烧场景…

场景:

  • 我有一个SQL Server数据库的持久性。我希望所有对数据库的访问都在一个事务中。
  • 我将使用存储库访问存储在数据库中的域对象。
  • 控制器可能需要使用多个存储库来完成它的工作,因此数据访问需要基于每个存储库的相同实例,以避免锁定问题。
  • 数据访问应该是每个请求的web应用程序。

我的困惑/思考:

  • 如果Ninject在适当的DB工厂或上下文中推到我所有的存储库,那么在哪里(以及如何)我将代码提交成功完成或回滚,如果发生异常?理想情况下,你不想为每个控制器动作这样做,所以我猜在全局asax EndRequest事件,但如何知道是否提交或回滚。

查看Sharp Architecture对此的实现-尽管他们使用Windsor,但同样的方法可以用于Ninject。

基本上你添加Transaction属性所需的控制器方法-管道都是由Sharp Arch框架处理。

最新更新