6

Ninject の依存性注入では、次のようにクラスのバインディングをそれ自体に設定すると:

Bind<SomeClass>().ToSelf();

Ninject は、SomeClass が持つ依存関係を非常にうまく解決し、オブジェクトを返します。後処理イベントのように、新しいクラスを作成するたびに返される SomeClass に対して何かを実行できるようにしたいと考えています。.ToMethod (または ToFactoryMethod) バインディングを使用して明示的に新しいものにすることもできますが、事前に Ninject によってすべての依存関係を解決したいと考えています。

次のようなことをするといいでしょう:

Bind<SomeClass>()
    .ToSelf()
    .After(sc => sc.MethodIWantToCall()); // then after here, Ninject returns the object.

Ninject 1.0/1.1 でこれを行う方法はありますか?

4

2 に答える 2

14

実行したいコードをコンストラクターに入れることができない場合は、IInitializableまたはを実装できますIStartable。前者は、Initialize()すべての注入が完了した後に呼び出されるメソッドを提供し、後者は、それぞれアクティブ化および非アクティブ化中に呼び出されるメソッドStart()とメソッドの両方を提供します。Stop()

于 2009-08-05T03:01:38.320 に答える
10

私は同じ問題に遭遇しましたが、タイプを実装することができなかったため、ネイトのソリューションを使用できませんでしたIInitializable。同様のボートに乗っている場合.OnActivationは、ターゲットタイプの定義を使用して変更する必要を回避できます。

Bind<SomeClass>().ToSelf().OnActivation(x => ((SomeClass)x).MyInitialize());

MyInitializeクラスのアクティブ化 (インスタンス化) 時に、任意の初期化メソッド ( ) を呼び出す方法を確認できます。

これには、独自のクラス (もちろんモジュールは別として) で Ninject への強い依存関係を焼き付けないという利点があるため、最終的に使用する DI フレームワークについて型を認識しないままにすることができます。

于 2012-05-30T16:18:10.623 に答える