我有ASP.NET MVC 3.0應用程序,EF Code First用於數據層。我已經實現了一個工作單元模式,我綁定了HttpContext.Current.Items [SomeKey]集合上的工作單元的上下文。工作單元在控制器上的OnActionExecuting/Executed事件中創建並提交。我正在使用溫莎城堡實例化存儲庫。如何使用UnitOfWorkPattern在EF代碼優先的ASP.NET MVC中實現Quartz.NET作業
現在我需要使用Quartz.net在我的應用程序中定期運行一個作業,這項工作也需要使用少量的存儲庫。問題是,在SchedulerJob實現中,沒有可用的HttpContext(實際上)。在這種情況下,如何從Quartz.net Job實例化一個存儲庫(它將UnitOfWorkFactory作爲構造參數)?我該如何替換丟失的HttpContext?我可能需要實現另一個UnitOfWorkFactory,但我不確定在哪裏可以綁定我的上下文,以及如何爲Quartz.net線程註冊不同的工廠。你能告訴我一種方式或模式嗎?謝謝。
我同意你的說法,即工作單元不應該依賴UI層。我讀過你的文章,但是我無法從中看到,如何將你的方法與存儲庫模式和DI結合起來。我想通過DI注入存儲庫(或外牆)的實例到我的控制器中。那麼如何讓知識庫知道當前的UnitOfWorkScope? – Mikee 2013-04-20 18:03:41
它與TransactionScope類似。只需在存儲庫中創建一個新的UOW,它將使用由gäller打開的UOW的DbContext。它處理DI,但也提供處理保存(或不)的投票。 – 2013-04-20 18:53:10
對於一個存儲庫來說似乎沒問題,但是如果我需要在更多存儲庫上執行復雜操作(對少數幾個不同存儲庫的調用很少),並且我希望在一個範圍內執行此複雜操作?我也注意到,你正在使用一個私有的ThreadStatic變量(scopedDbContext),這種方法在ASP MVC中安全嗎?我使用HttpContext.Current.Items集合來存儲上下文,因爲它是每個HTTP請求的唯一實例。是否保證,爲我的請求提供服務的線程將不會切換到UnitOfWorkScope塊中間的另一個請求? – Mikee 2013-04-20 19:16:17