1

私はしばらくの間 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 のライフサイクルはどうなりますか?

どんな洞察も大歓迎です。

4

1 に答える 1