随机发生的 Ninject 异常:"Error loading Ninject component ICache"



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

InvalidOperationException:加载Ninject组件ICache No时出错此类组件已在内核的组件中注册容器

建议:1)如果你已经为KernelBase,确保您实现了AddComponents()方法。2) 确保您没有通过调用从容器中删除组件RemoveAll()。3) 确保您没有意外创建超过一个内核。]Ninject.ComponentsComponentContainer.Get(类型组件)c: \Projects\Ninject\Ninject\src\Ninject\ComponentContainer.cs:160中的Ninject.Component.Component Container.Get()c: \Projects\Ninject\Ninject\src\Ninject\Component\Component Container.cs:116Ninject.Web.Common。<>中的c__DisplayClass2.b_1(IKernel内核)c: \Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\OnePerRequestHttpModule.cs:74中的Ninject.GlobalKernelRegistration.MapKernels(操作`1操作)c: \Projects\Ninject\Ninject\src\Ninject\GlobalKernelRegistration.cs:75Ninject.Web.Common.OnePerRequestHttpModule.DeactivateInstancesForCurrentHttpRequest()在里面c: \Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\OnePerRequestHttpModule.cs:74Ninject.Web.Common.OnePerRequestHttpModule.b_ 0(对象o,中的EventArgs e)c: \Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\OnePerRequestHttpModule.cs:56System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+136 System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,Boolean和completedSynchronously)+69

一旦我收到上述异常,简单地刷新或单击返回似乎会使网站重新开始正常运行。网站上似乎没有一个区域比另一个区域更能引起这种情况的发生。

这个问题与这里提出的问题非常相似:Ninject+"加载Ninject组件ICache时出错"。然而,这个问题中的问题似乎是由扩展本身的一个错误引起的,该错误已经存在一年多了,看起来已经解决了。

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

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

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

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

话虽如此,我在代码中看不出这个问题是如何在最新版本的Ninject中发生的。可能值得验证的是,应用程序和所有库都在最新版本的Ninject上。

最新更新