3

かなり大規模なプロジェクトでNinjectを使用しており、 DependencyCreationおよびEventBroker拡張機能を利用したいと考えています。

Dependency Creation readmeは、次の例を示しています(ただし、現在はInCreatorScope名前が変更されている可能性がありますInDependencyCreatorScope

this.kernel.Bind<IParent>().To<Parent>();
this.kernel.DefineDependency<IParent, Dependency>();
this.kernel.Bind<Dependency>().ToSelf().InCreatorScope();

この例では、コンテナを介して、相互に「ハード」参照を持つ場合Parentとしない場合の依存関係を作成します。Dependencyこれにより、コンポーネント間の緩い結合が促進され、イベントハンドラーを明示的に接続しなくても、イベントブローカーを使用してイベントを公開Parentおよびサブスクライブできます。Dependency

私の質問はこれです:他のオブジェクトに注入され、標準のアクティベーションの有効期間Dependencyを持たせたい場合はどうなりますか?RequestScope標準のアクティベーションにはリクエストスコープを使用しますが、一緒に作成すると依存関係の作成者スコープを使用することをどのように指定しParentますか?

4

1 に答える 1

2

条件付きバインディングを使用できます。

// dedine dependency as before
this.kernel.Bind<Dependency>().ToSelf().When(r => r.Parameters.OfType<DependencyCreationParameter>().Any()).InDependencyCreatorScope();
this.kernel.Bind<Dependency>().ToSelf().When(r => !r.Parameters.OfType<DependencyCreationParameter>().Any()).InRequestScope();

ただし、通常、イベントブローカーベースのソリューションを使用している場合は、作成したオブジェクトをOnActivationイベントブローカーにオーバーロードで登録するだけで、複雑なスコープを簡単に作成できます。

于 2013-01-16T05:32:00.760 に答える