Ninject MVC3 – 引导程序抛出“已初始化”exception

我创build了一个空的Asp.Net MVC3项目,并使用nuget install-package Ninject.MVC3

没有做任何事情(没有服务注册,甚至没有创build一个控制器)我运行该应用程序。

该项目在NinjectMVC3.cs中的第22行中断,但有以下例外:

Ninject.Web.Mvc.Bootstrapper.Initialize(Func`1 createKernelCallback)in c:\ Projects \ Ninject \ Maintenance2.2 \ ninject.web.mvc \ mvc3 \ src \ Ninject.Web.Mvc \ Bootstrapper.cs>:58 Mvc.App_Start.NinjectMVC3.Start()in c:\ Projects \ Events \ Events \ App_Start \ NinjectMVC3.cs:22

[TargetInvocationException:调用的目标引发了exception。]
System.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 []参数,CultureInfo culture,Boolean skipVisibilityChecks)+335
System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object []参数,CultureInfo culture)+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的较旧的(几周)包中,所以最近更新中可能还有其他内容被打破了?

请帮忙!

编辑以解决来自雷莫的答案

这是从我的global.asax.cs

  public class MvcApplication : System.Web.HttpApplication { 

global.asax是100%的标准。 没有做任何调整。

编辑 – 问题没有了…

我真的不知道是什么造成了这个问题,但是经过几次Visual Studio的重新启动,以及完全重新启动之后,这个项目就像应该那样工作。 我也不能在新项目中重现这个问题。

对不起浪费你的时间:)

看看build立一个MVC3应用程序

简而言之:

您的项目中可能有一个NinjectMVC3.cs文件的NinjectMVC3.cs文件夹。

当将NuGet包与修改Global.asax(没有任何理由)结合使用时,必须删除App_Start文件夹,并删除对WebActivator和Microsoft.Web.Infrastructure的引用

当我改变我的项目的命名空间,然后再次切换回来,这种情况出现了。

即使当我清理解决scheme,并做了iisreset它回来'已经初始化'。

问题出现在bin目录中创build的dll中,当我更改命名空间并构build项目时 – 在更改命名空间并清理解决scheme后,来自其他命名空间的dll仍然存在,因此在Web应用程序启动,导致“已经初始化”的错误。

删除dll修复了这个问题。

最有可能的是你从NinjectHttpApplication派生,同时使用AppStart。 这两种方式不应混为一谈。

阅读文档https://github.com/ninject/ninject.web.mvc/wiki/Setting-up-an-MVC3-application

我最近遇到了同样的问题。 在我的情况下,我有我的解决scheme中的多个项目…和更多的那些项目之一包含Ninject.MVC3的NuGet包引用。

当我更新了所有Ninject软件包版本时,App_Start文件夹在所有具有NuGet引用的项目上创build。 所以,我不得不从类库项目中删除App_Start文件夹; 只需将App_Start文件夹留在主MVC应用程序上即可。

我不确定是什么导致你的应用程序被炸,但我很高兴做VS重启解决它。 我有同样的错误发生,但不能纠正它,无论多less干净/重build我做了多less次,我重新启动VS.

结果为我工作的是完全删除Ninject MVC NuGet包,只是添加Ninject和Ninject DLL的老式的方式。 我认为他们的NuGet包可能有问题。

我希望这可以帮助别人,当我需要的时候,我浪费了几个小时来转储NuGet包。

问题没有了…

我真的不知道是什么造成了这个问题,但是经过几次Visual Studio的重新启动,以及完全重新启动之后,这个项目就像应该那样工作。 我也不能在新项目中重现这个问题。

对不起浪费你的时间:)

UPDATE

自从张贴这个答案几个很好的答案已经出现。 我正在更新这个答案,在一个答案中收集不同的方法。 希望没关系,你们:

DevilDog74回答

最后,我去了gitub并克隆了一个新的repo,下载了最新的Ninject.Web.Common和最新的Ninject2发行版,并做了一个本地发布版本。 然后我抛弃了nuget包,并将汇编引用到新编译的程序集“Ninject”,“Ninject.Web.Common”和“Ninject.Web.Mvc”,我的项目开始了>工作和控制器被创build与他们的依赖解决。

杰夫·齐尔切奥回答

我通过从https://github.com/ninject/ninject.web.mvc下载解决了这个问题,而不是使用nuget包。; 添加引用后,我不必做任何事情。

马库斯国王回答

结果为我工作的是完全删除Ninject MVC NuGet包,只是添加Ninject和Ninject DLL的老式的方式。 我认为他们的NuGet包可能有问题。

阅读文档!

https://github.com/ninject/ninject.web.mvc/wiki/Setting-up-an-MVC3-application

这些批评有什么区别?

两种方法都完全相同。 他们将Ninject挂钩到MVC应用程序中。 唯一的区别是他们使用不同的方法来做到这一点。 使用不同authentication的原因是NuGet包可以通过添加一个文件来提供开箱即用的集成。 否则,需要对global.asax进行复杂的修改

注意:如果您决定使用第一种方法(如果使用NuGet软件包(没有任何理由)),则必须删除App_Start文件夹,并删除对WebActivator和Microsoft.Web.Infrastructure的引用。

当我将Ninject.Web.MVC3软件包升级到版本2.2.2.0时,我遇到了同样的问题。 我注意到,这个更新添加了以下行到我的.csproj文件(VCS FTW!):

 <Compile Include="App_Start\NinjectMVC3.cs" /> 

更改构build操作从编译到该文件的内容解决了我的问题。 毕竟App_Start和App_Code一样邪恶

我通过手动删除/ bin文件夹中的一些dll解决了这个问题,当从Visual Studio运行Cleanup命令时,这个dll文件夹没有被删除。

我有同样的问题,我从NinjectHttpApplicationinheritance和重写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”进行汇编引用,我的项目开始工作,并且正在创build控制器,其中的依赖项被parsing。

这是我的代码看起来像,但我认为在nuget包中可能也有一个问题…

 public class MvcApplication : NinjectHttpApplication { protected override void OnApplicationStarted() { base.OnApplicationStarted(); AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); } protected override Ninject.IKernel CreateKernel() { // declaratively add the Ninject Modules that we have built to manage our dependencies... var modules = new INinjectModule[]{ new RepoModule() }; return new StandardKernel(modules); } public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); } public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults ); } } 

确保只有一个程序集有“NinjectMVC3”类,如果a.dll,b.dll在bin目录下都有NinjectMVC3类,就会出现这样的错误!

我只是有这个相同的问题,我意识到,这是因为NuGet NinjectMVC3.cs文件添加到我的networking应用程序和我的DAL库。 没有意识到发生了,但是一旦我从DAL库中删除文件就没事了。

当您使用nuGet时,会创build一个名为App_start的文件夹,查看它。

我只会把这个作为答案,因为我还没有看到任何人提到它,值得检查,然后克隆回购和什么。

我在一个包含15个项目的解决scheme中突然遇到了这个问题,其中三个是网站。 当我开始解决这个问题的时候,我一直在研究其中的一个网站,但是我没有改变任何明显会导致问题的东西:我不是只在任何地方添加了Ninject(它已经安装好了,工作正常),全球的asax文件不是从Ninject类派生的,任何App_Start文件夹中都没有错。

经过与NuGet和类似的一些搞砸之后,没有用(由未解决的参考信息带来 – 似乎Ninject没有被正确引用,但它是),我经历了所有的文件,我已经改变了特别注意项目和configuration文件,并发现不知何故,Visual Studio已经添加了其他网站之一作为项目引用到我试图运行。 因此,Ninjectconfiguration运行两次,导致问题,所以根本原因是相同的,但拧紧的方法是不同的。

这个项目的参考没有任何理由,因为它不是一个有效的依赖关系,我没有手动添加它,我仍然不知道它是如何发生的,但是立即删除它解决了问题。