Asp.net mvc 随机发生的Ninject异常:“0”;加载Ninject组件ICache时出错“;

Asp.net mvc 随机发生的Ninject异常:“0”;加载Ninject组件ICache时出错“;,asp.net-mvc,ninject,ninject.web.mvc,Asp.net Mvc,Ninject,Ninject.web.mvc,我最近将Ninject和Ninject.Web.Mvc添加到现有的ASP.NET MVC4 Web应用程序中。浏览网站时,我收到以下异常,似乎是随机的: [InvalidOperationException:加载对象组件ICache编号时出错 这样的组件已经在内核的组件中注册 容器 建议:1)如果您已经为 KernelBase,确保您已正确 实现了AddComponents()方法。2)确保没有通过调用从容器中删除该组件 RemoveAll().3)确保没有意外创建超过 一个内核。]Ninjec

我最近将Ninject和Ninject.Web.Mvc添加到现有的ASP.NET MVC4 Web应用程序中。浏览网站时,我收到以下异常,似乎是随机的:

[InvalidOperationException:加载对象组件ICache编号时出错 这样的组件已经在内核的组件中注册 容器

建议:1)如果您已经为 KernelBase,确保您已正确 实现了AddComponents()方法。2)确保没有通过调用从容器中删除该组件 RemoveAll().3)确保没有意外创建超过 一个内核。]Ninject.Components.ComponentContainer.Get(类型 组件)在 c:\Projects\Ninject\Ninject\src\Ninject\Components\ComponentContainer.cs:160 中的Ninject.Components.ComponentContainer.Get() c:\Projects\Ninject\Ninject\src\Ninject\Components\ComponentContainer.cs:116 在 c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\OnePerRequestHttpModule.cs:74 中的Ninject.GlobalKernelRegistration.mapckernels(Action`1 Action) c:\Projects\Ninject\Ninject\src\Ninject\GlobalKernelRegistration.cs:75 Ninject.Web.Common.OnePerRequestHttpModule.DeactivateInstancesForCurrentHttpRequest()的 在里面 c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\OnePerRequestHttpModule.cs:74 Ninject.Web.Common.OnePerRequestHttpModule.b_0(对象o, 事件参数(e)在 c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\OnePerRequestHttpModule.cs:56 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136 System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔值&同步完成)+69

一旦我收到上述异常,简单地刷新或单击“上一步”似乎会导致站点再次开始正常运行。现场的任何一个区域似乎都不会比另一个区域更容易发生这种情况

这个问题与这里提出的问题非常相似:。然而,该问题中的问题似乎是由扩展本身的bug引起的,已经存在一年多了,看起来已经解决了

这在不修改NinjectWebCommon.cs文件的情况下发生。(没有加载模块,没有添加绑定。)让它停止的唯一方法是将NinjectWebCommon.cs从项目中完全排除

我不确定还应该包含哪些信息,因为除了安装Nuget软件包之外,我几乎没有做什么。也许值得注意的是,该项目确实包含了对使用Ninject进行DI的其他程序集的引用


我环顾了很多地方,不知道为什么会发生这种情况。如果您有任何建议,我们将不胜感激。

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


话虽如此,我在代码中看不到最新版本的Ninject会出现这种问题。在MVC应用程序中使用基于WebActivator和Global.asax.cs的方法启用Ninject时,可能需要验证应用程序和所有库是否在最新版本的Ninject上。

这会发生。我认为我们将尝试稍微重构代码,以消除使用尼尼特。我将看看这会产生什么影响,并验证版本号。在使用Ninject删除对外部程序集的引用后,问题似乎消失了。希望这能把事情弄清楚,谢谢你的帮助!