[英]Why is a byte[] of 0 Length being injected into my class?
我在MVC 4網站中使用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)
其中, AKeyAttribute
是擴展Attribute
的類。 我的問題是,當代碼進入A
的構造函數內部時,其參數為長度為0而不是1的byte
。
有任何想法嗎? 謝謝!
編輯
這太不可思議了。 我已經將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>();
那不行
我猜想當您在類的構造函數中對某物進行數組處理時,它會期望多次注入嗎? 有沒有辦法覆蓋這個?
這就是我最終要做的。 如果您需要將常量數組注入構造函數中,並且可以更改構造函數,則一種方法是將所討論類型的Func<>
注入如下:
byte[] hash = ...
kernel.Bind<Func<byte[]>>().
ToConstant(new Func<byte[]>(() => hash)).
WhenTargetHas<AKeyAttribute>();
public A([AKey] Func<byte[]> key)
(然后顯然在構造函數中調用Func<>
。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.