將 Ninject 與 DbContext 一起用於 MVC
Ninject 是 .NET 的流行依賴注入框架。它允許您管理應用程式物件的創建和生命週期。
確保 DbContext 清理
正如您所提到的,您的 DbContext 是由 Ninject 創建並註入控制器中的。預設情況下,一旦垃圾收集器收集了與它們綁定的範圍對象,Ninject 就會處理 Disposable 物件(例如 DbContext)。這表示您不需要在 DbContext 上明確呼叫 Dispose。
避免重複的DbContext 參數
如果您有一個處理常見初始化並接受DbContext 的基本控制器參數,您可以透過使用InParentScope() 範圍擴展來避免將此參數新增至每個控制器。一旦注入的物件被垃圾收集,這將立即處理 DbContext。
public class BaseController : Controller { protected DbContext MyDbContext; public BaseController() { MyDbContext = _context; } }
DbContext 建立最佳化
預設情況下,Ninject 會建立控制器建構期間的 DbContext,即使不需要。若要最佳化此行為,您可以建立自己的作用域,僅在實際需要時建立 DbContext。這是一個範例:
public class RequestScoped : Ninject.Activation.Scope { protected override object Activate(IContext context, object instance) { bool disposeAfterUse = (instance is Disposable); var result = context.Kernel.Components .Get<MyDbContextFactory>() .CreateContext(); return disposeAfterUse ? new DisposedWhenRequestEnds(result) : result; } }
可以像這樣使用此作用域:
kernel.Bind<MyDbContext>() .To<MyDbContext>() .InScope(new RequestScoped());
現在,只有在請求需要時才建立 DbContext。
以上是Ninject 如何優化 MVC 應用程式中的 DbContext 管理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!