我创建了一个空的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:Exception 被一个人的目标抛出了 调用]
System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo 方法,对象目标,对象[] 参数,SignatureStruct& SIG, MethodAttributes methodAttributes, RuntimeType typeOwner)+0
System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo 方法,对象目标,对象[] 参数,签名信号, MethodAttributes methodAttributes, RuntimeType typeOwner)+72
System.Reflection.RuntimeMethodInfo.Invoke(对象 obj,BindingFlags invokeAttr,Binder binder,Object []参数, CultureInfo文化,布尔 skipVisibilityChecks)+335
System.Reflection.RuntimeMethodInfo.Invoke(对象 obj,BindingFlags invokeAttr,Binder binder,Object []参数, 文化信息文化)+28
System.Reflection.MethodBase.Invoke(对象 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的旧(周)包中,所以在最近的更新中可能还有其他内容被破坏了吗?
请帮忙!
编辑以解决来自Remo的回答
这是来自我的global.asax.cs
public class MvcApplication : System.Web.HttpApplication
{
global.asax也是100%的标准。没有做任何调整。
编辑 - 问题已经消失......
老实说,我不知道是什么导致了这种情况,但是在重新启动Visual Studio并完全重启之后,该项目正在按原样运行。我也不能在新项目中重新创建问题。
抱歉浪费你的时间:)
答案 0 :(得分:33)
查看Setting up a MVC3-application
简而言之:
您的项目中可能包含App_Start
个文件夹NinjectMVC3.cs
。
将NuGet包与修改Global.asax(没有理由)一起使用时,必须删除App_Start
文件夹并删除对WebActivator和Microsoft.Web.Infrastructure的引用
答案 1 :(得分:15)
当我更改项目的命名空间,然后再将其切换回来时,这种情况出现了。
即使我清理了解决方案并执行了iisreset,它也会以“已经初始化”的方式返回。
问题产生于我更改命名空间并构建项目时在bin目录中创建的dll - 在更改命名空间并清理解决方案后,替代命名空间中的dll仍然存在,因此正在在Web应用程序启动时加载,导致“已初始化”错误。
删除dll解决了问题。
答案 2 :(得分:12)
您很可能是从NinjectHttpApplication派生并同时使用AppStart。这两种方式不应混淆。
阅读文档https://github.com/ninject/ninject.web.mvc/wiki/Setting-up-an-MVC3-application
答案 3 :(得分:4)
我最近遇到了同样的问题。就我而言,我的解决方案中有多个项目...而且其中一个项目包含对Ninject.MVC3的NuGet包引用。
当我更新了所有Ninject包版本时,在所有具有NuGet引用的项目上创建了App_Start文件夹。所以,我不得不从类库项目中删除App_Start文件夹;只需将App_Start文件夹留在主MVC应用程序上。
答案 4 :(得分:3)
问题消失了......
老实说,我不知道是什么导致了这种情况,但是在重新启动Visual Studio并完全重启之后,该项目正在按原样运行。我也不能在新项目中重新创建问题。
抱歉浪费你的时间:)
<强>更新强>
自从发布此答案后,出现了一些好的答案。我正在更新这个答案,以便在一个答案中收集不同的方法。希望对你们好:
DevilDog74已回答
最后我去了gitub并克隆了一个 新的回购,下载了最新的 Ninject.Web.Common和最新的Ninject2 发布版本并进行本地发布 建立。 然后我抛弃了nuget包并对新编译的&gt;进行了汇编引用。程序集“Ninject”,“Ninject.Web.Common”和“Ninject.Web.Mvc”和我的项目开始&gt;正在创建工作和控制器,其依赖关系正在解决。
Jeff Circeo已回答
我通过下载解决了这个问题 从 https://github.com/ninject/ninject.web.mvc 而不是使用nuget包。一世 在我之后没有做任何事情 添加了参考文献。
Marcus King已回答
最终为我工作的是 删除Ninject MVC NuGet包 完全只需添加Ninject 和Ninject dll是老式的 办法。我想可能有些东西 他们的NuGet包错了。
答案 5 :(得分:3)
我不确定是什么导致你的应用程序炸弹,但我很高兴做VS重启解决了它。我发生了同样的错误,但无论我做了多少次清理/重建或重启VS多少次都无法纠正。
最终为我工作的是完全删除Ninject MVC NuGet包,只是添加Ninject和Ninject dll的老式方法。我认为他们的NuGet包可能有问题。
我希望这可以帮助别人,当我需要的只是转储NuGet包时,我浪费了几个小时。
答案 6 :(得分:2)
阅读文档!
https://github.com/ninject/ninject.web.mvc/wiki/Setting-up-an-MVC3-application
这些方法之间有什么区别?
两种方法完全相同。他们将Ninject挂钩到MVC应用程序中。唯一的区别是他们使用不同的approch来做到这一点。使用不同approchaches的原因是NuGet包可以通过添加一个文件提供开箱即用的集成。否则,需要对global.asax进行复杂的修改
注意:如果您决定使用第一种方法,如果使用NuGet包(没有理由),则必须删除App_Start文件夹并删除对WebActivator和Microsoft.Web.Infrastructure的引用。 强>
答案 7 :(得分:2)
当我将Ninject.Web.MVC3软件包升级到2.2.2.0版时,我遇到了同样的问题。我注意到此更新将以下行添加到我的.csproj文件(VCS FTW!):
<Compile Include="App_Start\NinjectMVC3.cs" />
将编译操作从编译更改为该文件的内容解决了我的问题。毕竟,App_Start和App_Code一样邪恶......
答案 8 :(得分:2)
我通过手动删除/ bin文件夹中的一些dll解决了这个问题,当从Visual Studio运行清理命令时,这些dll没有被删除。
答案 9 :(得分:1)
我遇到了同样的问题,我从NinjectHttpApplication继承并覆盖了OnApplicationStarted。 我通过从https://github.com/ninject/ninject.web.mvc下载而不是使用nuget包来解决此问题。
添加引用后我没有做任何事情。
答案 10 :(得分:1)
我花了大约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
);
}
}
答案 11 :(得分:1)
确保只有一个程序集具有“NinjectMVC3”类,如果a.dll,b.dll都在bin目录中都有NinjectMVC3类,那就会出现这样的错误!
答案 12 :(得分:1)
我刚才遇到了同样的问题,我意识到这是因为NuGet将NinjectMVC3.cs文件添加到我的网络应用程序和我的DAL库中。没有意识到发生了这种情况,但是一旦我从DAL库中删除了文件就没问题了。
答案 13 :(得分:0)
当您使用nuGet时,会创建一个App_start文件夹,请查看它。
答案 14 :(得分:0)
我会将此作为答案添加,因为我还没有看到任何人提及它,并且在离开之前进行检查并克隆回购和其他什么。
我在一个包含大约15个项目的解决方案中突然遇到了这个问题,其中三个是网站。当我开始遇到这个问题时,我一直在其中一个网站上工作,而我没有改变任何显然会导致问题的东西:我没有在任何地方添加Ninject(它已经安装并且工作得很好),全局的asax文件是不是从Ninject类派生的,任何App_Start文件夹都没有任何问题。
经过一段时间的讨论与NuGet等无关(由未解决的引用的消息引起 - 似乎Ninject没有被正确引用,但它是),我查看了我已经更改支付的所有文件特别注意项目和配置文件,并发现Visual Studio已经将某个其他网站添加为我试图运行的项目引用。结果Ninject配置被运行两次导致问题,所以根本原因是相同的,但是搞砸的方法是不同的。
该项目引用没有理由,因为它不是一个有效的依赖项,它之前不存在,我没有手动添加它,我仍然不知道它是如何发生的,但立即删除它修复了问题。 / p>