MVC アプリケーション開発のための Ninject の最大化: 最適化と利便性
DbContext 管理
Ninject は次のことを保証しますDbContext が破棄され、適切にクリーンアップされることを確認します。リファレンス ドキュメントで述べられているように、コンテナーは、関連付けられたスコープがガベージ コレクターによって収集されるときに、DbContext などの Disposable オブジェクトを破棄する責任があります。
Base Controller Commonality
個々のコントローラーに DbContext 引数を手動で追加する必要性を回避するには、代わりにグローバル フィルターを利用することを検討してください。フィルターを使用すると、継承に頼ることなく、横断的な問題に対処できます。たとえば、現在のユーザーに基づいて設定する共通の ViewBag プロパティがある場合、次のようなフィルターを作成できます。
public class CurrentUserProfileFilter : IAuthorizationFilter { public void OnAuthorization(AuthorizationContext filterContext) { var currentUserName = filterContext.HttpContext.User.Identity.Name; // Set ViewBag properties... } }
さらに、カスタム フィルター プロバイダーを登録して、フィルターごとの依存関係を解決します。リクエスト方法:
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 をargument.
DbContext 作成の最適化
パフォーマンスを考慮して、DbContext インスタンスの作成を最適化することをお勧めします。現在のリクエストに対して DbContext がすでに作成されているかどうかを確認する、Ninject のカスタム dependencyProvider を実装することを検討してください。そうでない場合は、DbContext を作成し、HttpContext データ バッグに保存します。存在する場合は、それを取得し、既存のインスタンスを使用します。
この戦略により、リクエストでデータベース アクセスが必要な場合にのみ DbContext インスタンスが作成されます。
以上がNinject は MVC アプリケーションでの DbContext 管理とコントローラー開発をどのように最適化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。