Ninject3 (NuGet インストール) を使用して ASP.NET MVC アプリケーションを作成しました。ソリューションには以下が含まれます。
- MVC プロジェクト (コンポジション ルート);
- ドメイン モデル プロジェクト。
- データレイヤー プロジェクト。
- スケジューラ プロジェクト (Windows サービス内でスケジュールされたジョブを実行し、代替コンポジション ルートを保持する);
- いくつかの他のプロジェクト。
私は、バインディングを定義するプロジェクト全体に多くの小さなモジュールを分散させるというアプローチに従っています。2 つのコンポジション ルートは、まったく同じバインディングを使用します。
クラス ライブラリ内のモジュールのスコープを構成する方法がわかりません。たとえば、次のバインディングがあるとします。
Bind<IDomainService1>()
.To<Service1Impl>()
.InSingletonScope(); //This should always be a singleton
Bind<IDomainService2>()
.To<Service2Impl>(); //No scope specified
の単一のインスタンスが常に必要ですが、のService1Impl
スコープはService2Impl
使用される構成ルートに依存する必要があります。MVC プロジェクトにはInRequestScope()
、Service2Impl
(およびスコープが指定されていない他のすべてのバインディングに対して) が必要です。http コンテキスト内で実行されないスケジューラ プロジェクトでは、 を使用する必要がありますInThreadScope()
。
このアプローチは正しいですか?はいの場合、この動作を構成する正しい方法は何ですか?