DbContext で MVC に Ninject を使用する
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 中国語 Web サイトの他の関連記事を参照してください。