2

MVC 4 Web サイトで Ninject.Web.WebApi-RC を使用しています。

私の NinjectWebCommon.cs ファイルには次のものがあります。

kernel.Bind<IA>().To<A>();
kernel.Bind<byte[]>().ToConstant(new byte[1]).WhenTargetHas<AKeyAttribute>();

私の WebApi コントローラーIKernelでは、コンストラクターで を要求しています (トラブルシューティングを試みているだけです)。Get<IA>()コントローラーコンストラクターを呼び出しています。のコンストラクタはA次のようになります。

public A([AKey] byte[] key)

whereAKeyAttributeは を拡張するクラスですAttribute。私の問題は、コードがA引数のコンストラクターの内部に入るとbyte、長さが 1 ではなく 0 になることです。

何か案は?ありがとう!

編集

これは信じられないほど奇妙です。のコンストラクターをA次のように変更しました。

public A([AKey] string test)

そして、私の NinjectWebCommon.cs ファイルは次のようになります。

kernel.Bind<string>().ToConstant("Test").WhenTargetHas<AKeyAttribute>();

そして、"Test"実際にコントローラーに注入されています。しかし、私がするとき:

public A([AKey] string[] test)
kernel.Bind<string[]>().ToConstant(new string[] { "Test" }).WhenTargetHas<AKeyAttribute>();

それはうまくいきません。

クラスのコンストラクターで何かの配列を実行すると、マルチインジェクションが期待されると思いますか? これをオーバーライドする方法はありますか?

4

1 に答える 1

0

これが私がやったことです。定数配列をコンストラクターに挿入する必要があり、コンストラクターを変更できる場合Func<>、次のように問題の型のa を挿入する方法があります。

byte[] hash = ...
kernel.Bind<Func<byte[]>>().
            ToConstant(new Func<byte[]>(() => hash)).
            WhenTargetHas<AKeyAttribute>();

public A([AKey] Func<byte[]> key)

(そして明らかFunc<>に、コンストラクターで を呼び出します。)

于 2013-08-23T11:37:13.730 に答える