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

时间:2011-07-20 14:05:45

标签: asp.net-mvc-3 ninject data-access-layer

我正在开始一个新项目,并希望做得比以前更好。我使用Windsor作为DI,但它没有变好。我一直在关注使用NuGet Ninject MVC 3软件包来处理DI。

我用Google搜索了好几个小时,并找到了很多有关Ninject的有用建议(特别喜欢过滤器DI的东西),但没有真正回答以下燃烧场景......

情景:

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

我的困惑/琢磨:

  • 如果Ninject在适当的数据库工厂或上下文中推送到我的所有存储库,那么如果发生异常,我将在何处(和如何)将代码提交成功完成或回滚?理想情况下,您不希望为每个控制器操作执行此操作,因此我猜测全局asax EndRequest事件,但如何知道是提交还是回滚。

1 个答案:

答案 0 :(得分:0)

查看Sharp Architecture的实现 - 虽然他们使用Windsor,但是同样的方法可以用于Ninject。

基本上你在Controller方法需要的地方添加Transaction属性 - 管道全部由Sharp Arch框架处理。