我创建了一个空的Asp.Net MVC3项目,并使用了nuget install-package Ninject.MVC3
没有做任何其他事情(没有注册服务,甚至没有创建控制器)我运行应用程序 .
项目在NinjectMVC3.cs的第22行中断,但有以下异常:
[InvalidOperationException:已经初始化!] Ninject.Web.Mvc.Bootstrapper.Initialize(Func`1 createKernelCallback)在c:\ Projects \ Ninject \ Maintenance2.2 \ ninject.web.mvc \ mvc3 \ src \ Ninject.Web.Mvc中\ bootstrapper.cs>:58 Mvc.App_Start.NinjectMVC3.Start()在c:\ Projects \ Events \ Events \ App_Start \ NinjectMVC3.cs:22 [TargetInvocationException:调用目标已抛出异常 . ]系统 . RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo方法,Object target,Object []参数,SignatureStruct&sig,MethodAttributes methodAttributes,RuntimeType typeOwner)0 System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo方法,Object target,Object []参数,Signature sig,MethodAttributes methodAttributes,RuntimeType typeOwner )72 System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object [] parameters,CultureInfo culture,Boolean skipVisibilityChecks)335 System.Reflection.RuntimeMethodInfo.Invoke(Object obj,B) indingFlags invokeAttr,Binder binder,Object []参数,CultureInfo文化)28 System.Reflection.MethodBase.Invoke(Object obj,Object []参数)19 WebActivator.BaseActivationMethodAttribute.InvokeMethod()199 WebActivator.ActivationManager.RunActivationMethods()330 WebActivator . ActivationManager.RunPreStartMethods()27 WebActivator.ActivationManager.Run()39
NinjectMVC3.cs中的行是:
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));
DynamicModuleUtility.RegisterModule(typeof(HttpApplicationInitializationModule));
bootstrapper.Initialize(CreateKernel); // <- this one right here...
}
这是怎么回事?我已经在其他项目中使用Ninject for MVC3而没有任何问题 . 我注意到,Start()方法中的第二行未包含在Ninject.MVC3的旧(周)包中,所以在最近的更新中可能还有其他内容被破坏了吗?
请帮忙!
Edit to address answer from Remo
这是来自我的global.asax.cs
public class MvcApplication : System.Web.HttpApplication
{
global.asax也是100%的标准 . 没有做任何调整 .
EDIT - Problem is gone...
老实说,我不知道是什么造成了这种情况,但经过几次重启Visual Studio并完全重启后,该项目正在按原样运行 . 我也不能在新项目中重新创建问题 .
抱歉浪费你的时间:)
15 回答
我刚才有同样的问题,我意识到这是因为NuGet将NinjectMVC3.cs文件添加到我的网络应用程序和我的DAL库中 . 没意识到发生过,但是一旦我从DAL库中删除了文件就没问题了 .
当您使用nuGet时,会创建一个App_start文件夹,请查看它 .
make sure only one assembly have the "NinjectMVC3" class ,if a.dll,b.dll all have the NinjectMVC3 class in then bin directory ,There will be such a mistake!
看看Setting up a MVC3-application
简而言之:
您可能在项目中有
App_Start
文件夹 .将NuGet包与修改Global.asax(没有理由)结合使用时,必须删除
App_Start
文件夹并删除对WebActivator和Microsoft.Web.Infrastructure的引用当我更改项目的命名空间,然后再将其切换回来时,这种情况出现了 .
即使我清理了解决方案并做了一个iisreset它回来了'已经初始化' .
当我更改命名空间并构建项目时,问题产生于bin目录中创建的dll - 在更改命名空间并清理解决方案后,替代命名空间中的dll仍然存在,因此在加载时Web应用程序启动,导致“已初始化”错误 .
删除dll修复了问题 .
您很可能是从NinjectHttpApplication派生并同时使用AppStart . 这两种方式不应混淆 .
阅读文档https://github.com/ninject/ninject.web.mvc/wiki/Setting-up-an-MVC3-application
我最近遇到了同样的问题 . 就我而言,我的解决方案中有多个项目...而且其中一个项目包含对Ninject.MVC3的NuGet包引用 .
当我更新所有Ninject包版本时,在所有具有NuGet引用的项目上创建了App_Start文件夹 . 所以,我不得不从类库项目中删除App_Start文件夹;只需将App_Start文件夹留在主MVC应用程序上 .
我不确定是什么导致你的应用程序炸弹,但我很高兴VS重启解决了它 . 我发生了同样的错误,但无论我做了多少次清理/重建或重启VS多少次都无法纠正 .
最终为我工作的是完全删除Ninject MVC NuGet包,只需添加Ninject和Ninject dll的老式方法 . 我认为他们的NuGet包可能有问题 .
我希望这有助于其他人,当我需要的只是转储NuGet包时,我浪费了几个小时 .
Problem is gone...
老实说,我不知道是什么造成了这种情况,但经过几次重启Visual Studio并完全重启后,该项目正在按原样运行 . 我也不能在新项目中重新创建问题 .
抱歉浪费你的时间:)
UPDATE
自从发布这个答案后,出现了一些好的答案 . 我正在更新这个答案,以便在一个答案中收集不同的方法 . 希望你们好吗:
阅读文档!
https://github.com/ninject/ninject.web.mvc/wiki/Setting-up-an-MVC3-application
这些方法有什么区别?
两种方法完全相同 . 他们将Ninject挂钩到MVC应用程序中 . 唯一的区别是他们使用不同的approch来做到这一点 . 使用不同approchaches的原因是NuGet包可以通过添加一个文件提供开箱即用的集成 . 否则,它将需要对global.asax进行复杂的修改
NOTE: If you decide to go with the first approach if using the NuGet package (for which there is no reason) you have to delete the App_Start folder and remove the references to WebActivator and Microsoft.Web.Infrastructure.
当我将Ninject.Web.MVC3软件包升级到2.2.2.0版时,我遇到了同样的问题 . 我注意到这个更新将以下行添加到我的.csproj文件(VCS FTW!):
将构建操作从编译更改为该文件的内容解决了我的问题 . App_Start毕竟和App_Code一样邪恶......
我通过手动删除/ bin文件夹中的一些dll解决了这个问题,当从Visual Studio运行清理命令时,这些dll没有被删除 .
我遇到了一些相同的问题,我从NinjectHttpApplication继承并重写OnApplicationStarted . 我通过从https://github.com/ninject/ninject.web.mvc下载而不是使用nuget包解决了这个问题 .
添加引用后,我没有做任何事情 .
我花了大约4个小时搞乱nuget套餐,但无济于事 .
最后我去了gitub并克隆了一个新的repo,下载了最新的Ninject.Web.Common和最新的Ninject2发布版本并进行了本地发布 .
然后我抛弃了nuget包并对新编译的程序集“Ninject”,“Ninject.Web.Common”和“Ninject.Web.Mvc”进行了程序集引用,我的项目开始工作,并且正在创建控制器,其依赖项正在被解析 .
这是我的代码看起来像,但我认为nuget包中可能还有一个问题...
我将此作为答案添加,因为我还没有看到任何人提及它,并且在离开之前进行检查并克隆回购和诸如此类的东西 .
我在解决方案中突然遇到了这个问题,该解决方案包含15个项目,其中3个是网站 . 当我开始遇到这个问题时,我一直在其中一个网站上工作,而我没有改变任何显然会导致问题的东西:我没有在任何地方添加Ninject(它已经安装并且工作得很好),全局的asax文件是不是从Ninject类派生的,任何App_Start文件夹中都没有任何问题 .
经过一段时间的努力与NuGet等无关(由未解决的引用的消息引起 - 似乎Ninject没有被正确引用,但它是),我经历了我已经改变的所有文件,特别注意项目和配置文件,并发现Visual Studio已经添加了一个其他网站作为我试图运行的项目参考 . 结果Ninject配置被运行两次并导致问题,因此根本原因是相同的,但是搞砸的方法是不同的 .
没有理由那个项目引用,因为它不是一个有效的依赖项,它之前不存在,我没有手动添加它,我仍然不知道它是如何发生的,但立即删除它修复了问题 .