8

我有我的項目,它使用服務和工作單元通常存儲庫模式(所有Ninject注入NinjectModule的依賴關係),但我試圖從一個服務訪問服務ActionFilterAttribute在我顯示的頁面佈局中注入一些信息(來自數據庫),所以我不需要混淆每個控制器上的所有操作。ActionFilterAttribute ninject注入 - DbContext已處置

問題是當我保存到DB一個屏幕上,並移動到下一個,然後再回到以前的(與標準@Url.Action):該ActionFilterAttributeIndex動作被觸發,但在調用的服務和相應的存儲庫(屬性內)拋出異常,因爲DbContext has been disposed

訪問服務時是否有任何問題,因此ActionFilterAttribute中的DbContext在通過屬性注入注入服務時是否存在問題?我想記下一點,我在屬性中使用屬性注入來處理服務,因爲構造函數根據Action方法的簽名接收到兩個任意的參數,所以我唯一的選擇是注入via屬性。

讓我知道如果你需要一些代碼,我會更新問題。

+0

請添加一些代碼。 –

+0

數據庫上下文和它注入的所有地方都需要綁定inrequestscope(或更短的範圍) –

回答

3

我發現了以下問題的解決我的問題: Injecting dependencies into ASP.NET MVC 3 action filters. What's wrong with this approach?

結合Mark Seeman的回答與striplingwarrior的意見是解決它。

基本上我把我的ActionFilterAttribute分解成一個屬性,它只是裝飾了我的Actions,並且保存了我以後需要的參數,並且還包含了一個ActionFilter,它檢查了Action的自定義屬性,如果我的屬性存在,那麼它會注入我想要的數據從數據庫到ViewBag。之後所有內容都將綁定Ninject的BindFilter擴展,因此它僅適用於所需的方法。