我对Ninject和MVC 4感到沮丧。
以下是代码块:
Kernel.Bind<IUserInfo>().To<UserInfo().InRequestScope();
var userInfo = Kernel.Get<IUserInfo>();
大部分时间,这很好,我有一个用户信息。但有时候,我收到以下错误:
Error activating IUserInfo
No matching bindings are available, and the Type is not self-bindable.
Activation path:
1) Request for IUserInfo
Suggestions:
1) Ensure that you have defined a binding for IUserInfo.
2) If the binding was defined in a module, ensure that the module has been loaded into the kernel.
3) Ensure you have not accidentally created more than one kernel.
4) If you are using constructor arguments, ensure that the parameter name matches the constructors parameter name.\r\n 5) If you are using automatic module loading, ensure the search path and filters are correct.
我已经减少了我想不到的一切,而且我不知所措。我不知道为什么会间歇性地失败。根据我对Ninject的有限知识,应该没有办法让绑定失踪。
我看到很多关于使用Ninject MVC Nuget包的引用,但我继承它的应用程序不使用它们,它使用ActionFilter初始化Ninject。这种模式是否只是破坏其核心,并以某种方式干扰正确的绑定?
帮助?
答案 0 :(得分:0)
查看BindFilter
选项
https://github.com/ninject/ninject.web.mvc/wiki/Filter-configurations
我认为存在某种缓存问题,这使得过滤器的行为与控制器不同。这意味着绑定可能会失败,通常是在负载很重的情况下,但是不可预测。
答案 1 :(得分:0)
事实证明,较新版本的Ninject需要更多设置才能使InRequestScope正常工作。通过完全删除Ninject,并读取对Ninject,Ninject.Web.Common和Ninject.Web.MVC的引用,它添加了Ninject.Web.Common.cs文件,该文件是InRequestScope工作所必需的。
以前,它实际上是绑定InTransientScope,这意味着它会收集垃圾,这是非确定性的,这解释了我的间歇性问题。我希望当我试图绑定InRequestScope时,它会抛出异常,但是我可以使用它。