私はしばらくの間 Ninject を使用しており、それが私のコードにもたらすものを気に入っていますが、小さなジレンマに遭遇し、問題があるかどうか、または考えすぎているかどうか確信が持てません。
シナリオ: IIS でホストされている WCF サービス アプリ。EF6 RC1 を ORM として使用し、DbContext 派生クラスをデータ ライブラリのデータベース クラスに挿入します。JustMock (Telerik) を使用してすべての単体テストを実行し、db クラスに注入された dbcontext をモックして、これらの特定の単体テストを実行します。
追加した
kernel.Bind<MyContext>().ToSelf().InRequestScope();
http://www.davepaquette.com/archive/2013/03/27/managing-entity-framework-dbcontext-lifetime-in-asp-net-mvc.aspxからNinjectモジュールに。
WCF サービスのサービス動作は次のとおりです。
InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false
WCF ではなく MVC4 用に書かれた Dave Paquette の記事によると、ライフサイクルは OnePerRequestHttpModule (DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule)) の登録を通じて処理されます。Ninject WCF nuget パッケージを追加すると、Start に次のものが追加されました。 ():
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
私の質問は次のとおりです。WCF サービスが名前付きパイプと TCP (HTTP エンドポイントなし) のエンドポイントを公開し、そのコンテキストが PerCall ではなく PerSession であり、IIS でホストされている場合、dbcontext のライフサイクルはどうなりますか?
どんな洞察も大歓迎です。