最大化MVC 應用程式開發的Ninject:最佳化與便利
DbContext 管理
DbContext 管理
Ninject 確保您的DbContext 已被適當處置和清理。如參考文件所述,當垃圾收集器收集關聯範圍時,容器負責處置 Disposable 對象,例如 DbContext。
基本控制器通用性public class CurrentUserProfileFilter : IAuthorizationFilter { public void OnAuthorization(AuthorizationContext filterContext) { var currentUserName = filterContext.HttpContext.User.Identity.Name; // Set ViewBag properties... } }為了避免手動將 DbContext 參數添加到各個控制器的需要,請考慮使用全域過濾器。過濾器可讓您處理橫切關注點,而無需訴諸繼承。例如,如果您要根據目前使用者設定通用的ViewBag 屬性,則可以建立如下所示的篩選器:
public class GlobalFilterProvider : IFilterProvider { public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) { foreach (var filter in dependencyResolver.GetServices<IActionFilter>()) { yield return new Filter(filter, FilterScope.Global, order: null); } // Similar loop for other filter types... } }此外,註冊自訂篩選器提供者以解析每個篩選器的依賴關係請求方式:
這個方法不需要每個控制器接受DbContext 作為
最佳化DbContext建立出於效能考慮,您可能需要最佳化 DbContext 實例建立。考慮為 Ninject 實作一個自訂 DependencyProvider,用於檢查是否已為目前請求建立 DbContext。如果沒有,則建立 DbContext 並將其儲存在 HttpContext 封包中。如果存在,則檢索它並使用現有實例。 此策略可確保僅當請求需要資料庫存取時才建立 DbContext 實例。以上是Ninject 如何優化 MVC 應用程式中的 DbContext 管理和控制器開發?的詳細內容。更多資訊請關注PHP中文網其他相關文章!