2011-07-20 72 views
0

我正在開始一個新項目,並希望做的事情比我以前做的更好。我使用溫莎作爲DI,但效果並不好。我一直在關注使用NuGet Ninject MVC 3包來照顧DI。在Ninject中使用ASP.NET MVC3中的數據庫事務DI

我用Google搜索周圍幾個小時,發現很多關於Ninject(尤其是順心的過濾器DI的東西),但沒有真正回答下列情形燃燒有用的建議的......

場景:

  • 我有一個用於持久性的SQL Server數據庫。我希望對數據庫的所有訪問都處於事務中。
  • 我將使用存儲庫訪問存儲在數據庫中的域對象。
  • 控制器可能需要使用多個存儲庫來完成它的工作,因此數據訪問需要基於每個存儲庫的相同實例以避免鎖定問題。
  • 數據訪問應該是針對網絡應用的請求。

我的困惑/深思:

  • 如果Ninject猛推在適當的DB工廠或上下文我所有的倉庫又在哪裏(以及如何)我把代碼提交成功完成或回滾如果發生異常?理想情況下,您不希望爲每個控制器操作執行此操作,因此我在全局asax EndRequest事件中猜測,但如何知道是提交還是回滾。

回答

0

退房Sharp Architecture的實現 - 雖然他們使用溫莎,但相同的方法可以用於Ninject。

基本上,您在控制器方法需要時添加Transaction屬性 - 管道工作全部由Sharp Arch框架處理。

+0

通過閱讀Sharp Architecture的幾個頁面,聽起來好像我必須安裝一大堆第三方庫,使用NHibernate並使用Sharp Architecture來使用Transaction屬性 - 這看起來像是大量的矯枉過正因爲到目前爲止我所使用的唯一的第三方庫就是NUnit。 – Peter

+0

同意 - 我不打算向你建議這種方法 - 僅僅是爲了展示一個行動中的建築實踐,這是行得通的。顯然你需要編寫你自己的屬性實現。 – BonyT

+0

Doh!當然,哈哈;有源,它看起來應該相當簡單。 – Peter