首页 文章

Ninject MVC3 - 引导程序抛出“已经初始化”的异常

提问于
浏览
34

我创建了一个空的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 回答

  • 2

    我刚才有同样的问题,我意识到这是因为NuGet将NinjectMVC3.cs文件添加到我的网络应用程序和我的DAL库中 . 没意识到发生过,但是一旦我从DAL库中删除了文件就没问题了 .

  • 1

    当您使用nuGet时,会创建一个App_start文件夹,请查看它 .

  • 0

    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!

  • 3

    看看Setting up a MVC3-application

    简而言之:

    您可能在项目中有 App_Start 文件夹 .

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

  • 15

    当我更改项目的命名空间,然后再将其切换回来时,这种情况出现了 .

    即使我清理了解决方案并做了一个iisreset它回来了'已经初始化' .

    当我更改命名空间并构建项目时,问题产生于bin目录中创建的dll - 在更改命名空间并清理解决方案后,替代命名空间中的dll仍然存在,因此在加载时Web应用程序启动,导致“已初始化”错误 .

    删除dll修复了问题 .

  • 3

    您很可能是从NinjectHttpApplication派生并同时使用AppStart . 这两种方式不应混淆 .

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

  • 4

    我最近遇到了同样的问题 . 就我而言,我的解决方案中有多个项目...而且其中一个项目包含对Ninject.MVC3的NuGet包引用 .

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

  • 1

    我不确定是什么导致你的应用程序炸弹,但我很高兴VS重启解决了它 . 我发生了同样的错误,但无论我做了多少次清理/重建或重启VS多少次都无法纠正 .

    最终为我工作的是完全删除Ninject MVC NuGet包,只需添加Ninject和Ninject dll的老式方法 . 我认为他们的NuGet包可能有问题 .

    我希望这有助于其他人,当我需要的只是转储NuGet包时,我浪费了几个小时 .

  • 1

    Problem is gone...

    老实说,我不知道是什么造成了这种情况,但经过几次重启Visual Studio并完全重启后,该项目正在按原样运行 . 我也不能在新项目中重新创建问题 .

    抱歉浪费你的时间:)

    UPDATE

    自从发布这个答案后,出现了一些好的答案 . 我正在更新这个答案,以便在一个答案中收集不同的方法 . 希望你们好吗:

    DevilDog74最后回答我去了gitub并克隆了一个新的repo,下载了最新的Ninject.Web.Common和最新的Ninject2发布版本并进行了本地发布版本 . 然后我抛弃了nuget包并对新编译的>程序集“Ninject”,“Ninject.Web.Common”和“Ninject.Web.Mvc”进行了程序集引用,我的项目开始工作,并且正在创建控制器,其依赖关系是解决 . Jeff Circeo回答我通过从https://github.com/ninject/ninject.web.mvc下载而不是使用nuget包解决了这个问题 . 添加引用后,我没有做任何事情 . Marcus King回答最终为我工作的是完全删除Ninject MVC NuGet包,只是添加Ninject和Ninject dll的老式方式 . 我认为他们的NuGet包可能有问题 .

  • 2

    阅读文档!

    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.

  • 12

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

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

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

  • 1

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

  • 2

    我遇到了一些相同的问题,我从NinjectHttpApplication继承并重写OnApplicationStarted . 我通过从https://github.com/ninject/ninject.web.mvc下载而不是使用nuget包解决了这个问题 .

    添加引用后,我没有做任何事情 .

  • 0

    我花了大约4个小时搞乱nuget套餐,但无济于事 .

    最后我去了gitub并克隆了一个新的repo,下载了最新的Ninject.Web.Common和最新的Ninject2发布版本并进行了本地发布 .

    然后我抛弃了nuget包并对新编译的程序集“Ninject”,“Ninject.Web.Common”和“Ninject.Web.Mvc”进行了程序集引用,我的项目开始工作,并且正在创建控制器,其依赖项正在被解析 .

    这是我的代码看起来像,但我认为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
            );
    
        }
    }
    
  • 34

    我将此作为答案添加,因为我还没有看到任何人提及它,并且在离开之前进行检查并克隆回购和诸如此类的东西 .

    我在解决方案中突然遇到了这个问题,该解决方案包含15个项目,其中3个是网站 . 当我开始遇到这个问题时,我一直在其中一个网站上工作,而我没有改变任何显然会导致问题的东西:我没有在任何地方添加Ninject(它已经安装并且工作得很好),全局的asax文件是不是从Ninject类派生的,任何App_Start文件夹中都没有任何问题 .

    经过一段时间的努力与NuGet等无关(由未解决的引用的消息引起 - 似乎Ninject没有被正确引用,但它是),我经历了我已经改变的所有文件,特别注意项目和配置文件,并发现Visual Studio已经添加了一个其他网站作为我试图运行的项目参考 . 结果Ninject配置被运行两次并导致问题,因此根本原因是相同的,但是搞砸的方法是不同的 .

    没有理由那个项目引用,因为它不是一个有效的依赖项,它之前不存在,我没有手动添加它,我仍然不知道它是如何发生的,但立即删除它修复了问题 .

相关问题