簡體   English   中英

自定義角色提供程序 - 已處置DbContext

[英]Custom Role Provider - DbContext disposed

我有一個使用Entity Framework的MVC 3應用程序,我在其中設置了一個自定義角色提供程序。

我的角色提供程序依賴於存儲庫,該存儲庫依賴於DbContext。

我正在app start方法中將我的上下文和存儲庫注冊為已實現的接口 - 每個http請求的實例。

我最初嘗試在我的自定義角色提供程序中使用Initialize方法來使用服務定位器模式解析存儲庫依賴關系並將其設置為類的屬性:

DependencyResolver.Current.GetService<IMyRepository>();

存儲庫解決沒有問題,但是我得到一個異常,說明已經處理了DbContext

我已經能夠通過改變兩件事來解決這個問題:

  • 將存儲庫和上下文注冊為每個依賴項的實例,而不是每個http請求。
  • 每次通過在屬性上使用getter而不是在initialize方法中使用getter來調用角色提供程序的方法時,解析存儲庫依賴項。

所以這一切現在似乎工作得很好但是,我不完全理解為什么即使在閱讀有關autofac生命周期范圍的各種文章之后。

*代碼樣本來

我唯一的理論是角色提供者在創建http請求之前就開始了,當使用每個http請求的實例時 - 角色提供者正在解析先前請求的實例,這些實例后來被處理掉了?

Asp.Net角色提供程序的生命周期由運行時管理,並且與應用程序的生命周期相關聯,而不是單個請求。

因此,如果您在初始化方法中解決依賴關系,那么只有在導致它掛在已處理的DbContext上時才會發生這種情況。 標准做法是根據您的修復解決每種方法一次。

關於角色提供程序使用的DbContext的生命周期管理,我會將角色提供程序設置為每個原子操作使用自己的DbContext(因此工作單元)。 如果您的角色提供程序僅執行讀取,則可以從其他位置重新使用DbContext。 但是,如果它針對您的數據庫運行命令,則您可以使用DbContext的根范圍的所有者來提交這些更改。

我想你為什么perHttpRequest失敗的解釋是正確的,只是使用每個依賴,因為上面的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM