我在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的byte
,而不是1。
有什么想法吗?谢谢!
修改
这非常奇怪。我已将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>();
这不起作用。
我猜你什么时候在类'构造函数中做一些事情,它期望多次注入?有没有办法覆盖这个?
答案 0 :(得分:0)
这就是我最终做的事情。如果你需要将一个常量数组注入到构造函数中,你可以改变构造函数,一种方法是注入一个问题类型的Func<>
,如下所示:
byte[] hash = ...
kernel.Bind<Func<byte[]>>().
ToConstant(new Func<byte[]>(() => hash)).
WhenTargetHas<AKeyAttribute>();
public A([AKey] Func<byte[]> key)
(然后显然在你的构造函数中调用Func<>
。)