8

我最近将 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 的其他程序集的引用。

我环顾四周,不知道为什么会发生这种情况。任何建议将不胜感激。

4

1 回答 1

6

显然,您的应用程序中涉及多个内核(MVC + Libs)。应该避免在应用程序运行时创建和释放内核实例。我强烈建议更改您的设计,以便在应用程序启动时创建少量内核。以后不会创建任何内容(包括所有库)。

Having said that, I don't see any way in the code how this problem can happen with the latest version of Ninject. It may be worth verifying that the Application and ALL the libraries are on the latest version of Ninject.

于 2012-12-07T08:57:29.523 回答