最近採取的步驟將Ninject 合併到MVC 應用程式中並將DbContext 引入到控制器的建構子中,自然會出現某些問題出現:
Ninject 是否保證清理並及時處置我的DbContext實例?
正如此響應中所述:
根據 CLR 文檔,Disposable 對象的創建者負責調用 Dispose,在本例中為 Ninject。因此,不鼓勵顯式呼叫 Dispose。
一旦 GC 收集到它們所綁定的範圍對象,Ninject 就會在 InTransientScope() 之外的任何範圍內處置 Disposable 對象。因此,所有 Disposable 物件都應使用不是 InTransientScope() 的範圍進行綁定。
消除在每個控制器中包含 DbContext 參數的要求是否可行?
完全避免使用 MVC 控制器的共用基底類別。類別繼承促進了緊密耦合並妨礙了可維護性。此外,它往往會創建“上帝對象”,從而需要每個控制器進一步依賴。
或者,考慮利用全域註冊的過濾器來處理橫切關注點。您可以為不同的邏輯元件設計特定的篩選器,遵守單一職責原則,共用基底類別會違反此原則。透過全域註冊它們,您可以使用建構函式註入,甚至可以為控制器和/或操作層級的條件應用程式建立屬性(無行為)。
如何最佳化 DbContext 實例的建立?
請參閱以下問題以取得見解:[每個 Web 請求一個 DbContext...為什麼? ](https://stackoverflow.com/questions/9155198/one-dbcontext-per-web-request-why)
以上是Ninject 和 DbContext:確保正確處置並最佳化實例建立?的詳細內容。更多資訊請關注PHP中文網其他相關文章!