2011-09-29 6 views
7

私が探しているものは非常に単純なものだと思いますが、例は見つかりません。ToMethod経由でパラメータを持つメソッドにバインドするインタフェース

StandardKernel.Get<ISomeInteface>(new Ninject.Parameters.Parameter("dataContext", dataContext, true)); 
:ここではオブジェクトの

要求: 私は、オブジェクトをインスタンス化するために、実際の要求時に指定されておらず注入したパラメータを持つファクトリメソッドを呼び出すNinject持つことによって、オブジェクトを作成するためにNinjectを使用したいです

そして、ISomeInterfaceを、実行時に値が渡されることを期待しているメソッドにマップしたいと思います。

ここにインタフェースのマッピング:

Kernel.Bind<ISomeInterface>().ToMethod(SomeObject.Create(--> `what do I put here?`)); 

これは可能ですか?もしそうなら、インターフェイスを正しくマッピングするにはどうしたらいいですか? ありがとう!

答えて

6
ToMethod(ctx => 
    SomeObject.Create(
     (IDataContext)ctx.Parameters.Single(p =>p.Name == "dataContext") 
     .GetValue(ctx, null)) 

しかし、あなたはどこか他のあなたの複合root以外からGetの呼び出しを避けるために、あなたのデザインを再考する必要があります。

+0

返信いただきありがとうございます!残念ながら、コードはコンパイルされません。そして、はい、私は複合ルートからファクトリメソッドを呼び出すことを計画しています。それらの継承階層があります(それらの多くがあるので)。そして、それらのすべてのために単一のファクトリを使用します。 – Igorek

+0

コンパイラに問題があります。 Create()関数が受け取るパラメータオブジェクトとIDataContextオブジェクトの間の変換 – Igorek

+0

Sry私は.GetValue()の更新を追加しませんでした。 –

関連する問題