我最近将 Ninject 和 Ninject.Web.Mvc 添加到现有的 ASP.NET MVC 4 Web 应用程序中。浏览该网站时,我收到以下异常,似乎是随机的:
[InvalidOperationException:加载 Ninject 组件 ICache 时出错 内核的组件容器中没有注册此类组件。
建议: 1) 如果您已经为 KernelBase 创建了自定义子类,请确保您已正确实现 AddComponents() 方法。2) 确保您没有通过调用 RemoveAll() 从容器中删除组件。3) 确保您没有意外创建多个内核。] Ninject.Components.ComponentContainer.Get(Type component) in c:\Projects\Ninject\ninject\src\Ninject\Components\ComponentContainer.cs:160 Ninject.Components.ComponentContainer.Get() in c:\Projects\Ninject\ ninject\src\Ninject\Components\ComponentContainer.cs:116 Ninject.Web.Common.<>c__DisplayClass2.b__1(IKernel kernel) in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\ OnePerRequestHttpModule.cs:74 Ninject.GlobalKernelRegistration.MapKernels(Action`1 action) in c:
一旦我收到上述异常,只需刷新或单击返回似乎会导致站点再次开始正常运行。该网站的任何一个区域似乎都不会导致它发生。
该问题与此处提出的问题非常相似:Ninject + "Error loading Ninject component ICache"。但是,该问题中的问题似乎是由扩展本身的错误引起的,已经存在一年多,并且看起来已经解决。
发生这种情况时无需对NinjectWebCommon.cs文件进行任何修改。(没有加载模块,没有添加绑定。)我让它停止的唯一方法是从项目中完全排除NinjectWebCommon.cs 。
我不确定要包括哪些其他信息,因为除了安装 Nuget 软件包之外我几乎没有做任何事情。或许值得注意的是,该项目确实包含对使用 Ninject for DI 的其他程序集的引用。
我环顾四周,不知道为什么会发生这种情况。任何建议将不胜感激。