2012-02-29 2 views
5

コンストラクタ引数の一部としてNinjectバインディングのメソッドを指す必要があります。クラスのコンストラクタは次のようになります。WithConstructorArgumentへのNinject Passの代理人

MyObject(Func<Populator> param1, TimeSpan time) 

は、私が探してきたとのFuncのデリゲートをバインドする方法を見つけることができませんでした。これも可能ですか? Ninjectは、引数としてオブジェクトを期待しているため、代理人を取得しないため、これを行わないようにします。

Bind<IInterface>() 
     .To<MyObject>() 
     .InSingletonScope() 
     .WithConstructorArgument 
      ("param1", ctx => ctx.Kernel.Get<OtherWiredObject>().PopMethod) 
     .WithConstructorArgument 
      ("time", new TimeSpan(0,30,0)); 

Ninjectでこの動作を有効にする方法はありますか?

+1

を。 '()=> Kernel.Get ()。PopMethod'を実行したらどうなりますか? – dotjoe

+0

'()=> Kernel.Get ()。PopMethod' WithConstructorArgumentメソッドのシグネチャを見ると、Funcはオブジェクトが返されることを期待しています。パラメータ。おそらくこれのまわりに別の方法がありますか? –

+0

は 'PopMethod'は' Populator'型のプロパティですか? – dotjoe

答えて

3

あなたはこのようにバインディングを定義することができます:オーバーロードは、コールバック関数のように見える

Bind<Func<Populator>>().ToMethod(ctx => ctx.Kernel.Get<OtherWiredObject>().PopMethod);