簡體   English   中英

為什么將長度為0的byte []注入我的班級?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM