Ninject InRequest 范围丢失绑定

Ninject InRequest Scope Losing Binding

我在使用 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。这种模式是否只是在其核心被破坏,并且以某种方式干扰了正确的绑定?

帮忙?

看看 BindFilter 选项 https://github.com/ninject/ninject.web.mvc/wiki/Filter-configurations

我认为存在某种缓存问题,这使得过滤器的行为与控制器不同。这意味着绑定可能会失败,通常是在重负载下,但不可预测。

事实证明,较新版本的 Ninject 需要更多设置才能使 InRequestScope 工作。通过完全删除 Ninject,并读取对 Ninject、Ninject.Web.Common 和 Ninject.Web.MVC 的引用,它添加了 InRequestScope 工作所必需的 Ninject.Web.Common.cs 文件.

以前,它实际上绑定了 InTransientScope,这意味着它会收集垃圾,这是不确定的,这解释了我的间歇性问题。我希望它在我尝试绑定 InRequestScope 时会抛出异常,但是这就是生活。