我创建了一个新的MVC3项目,点击F5,看到了示例页面。
然后我用NuGet来获取Ninject.MVC extension。我根据Ninject文档How To Setup an MVC3 Application修改了我的global.asax:
public class MvcApplication : NinjectHttpApplication
{
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 });
}
protected override IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
return kernel;
}
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
}
现在,当我运行应用程序时,我会看到死亡的黄色屏幕,但有以下异常:
InvalidOperationException - Sequence不包含任何元素。
在System.Linq.Enumerable.Single(...)
在Ninject.Web.Mvc.Bootstrapper.Initialize(...) 第67行。
果然,line 67 of that file调用.Single(),从而抛出异常。
我做错了什么?
答案 0 :(得分:120)
我必须补充一点,希望别人能够更快地解决这个问题,而不是像我差不多那样把头发拉到头上。
我需要重命名项目中的所有内容以匹配新的业务术语。我在任何地方更改了名称空间,我甚至更改了程序集名称(右键单击项目>属性>应用程序选项卡),以便生成的程序集与新的命名约定相匹配。装配重命名是让Ninject非常愤怒的原因!
通过重命名生成的程序集,我们在编译时创建了一个带有新名称的新文件。但是,旧文件的旧文件仍在bin目录中!如果您通过App_Start中添加的类激活Ninject,则将在BOTH程序集(旧的和新重命名的程序集)中调用此激活类。不要问我怎么或为什么,但确实如此,它会给你这个“已经初始化”的错误。
甚至清理解决方案都不起作用,因为Visual Studio只会删除它正在生成的二进制文件,这将是新重命名的二进制文件。它只留下旧的那些只是坐在那里。
在尝试执行任何其他操作之前,请先删除您的bin文件夹!我希望这可以节省其他人浪费宝贵的工作时间!
答案 1 :(得分:101)
您可能会注意到在安装ninject.mvc3
NuGet后,项目中创建了一个包含App_Start
文件的NinjectMVC3.cs
子文件夹。删除此文件夹,然后重试。以下是我遵循的步骤:
install-package ninject.mvc3
Global.asax
中的默认代码替换为您问题中的代码AppStart
子文件夹/Home/Index
默认页面的美丽: - )答案 2 :(得分:23)
我已更新了您问题中链接的文档Wiki,以显示设置MVC3应用程序的两种方法。我建议使用第二个选项,这是NuGetpackage的首选方式。
它不是从NinjectHttpApplication派生而是使用AppStart文件夹中的NinjectMVC.cs,该文件夹是在安装包时创建的。这也是您创建内核的位置以及加载模块的位置或定义绑定的位置。
答案 3 :(得分:4)
正如Alex Ford所说:
我必须补充一点,希望别人能解决这个问题 发出更快,不想拔掉每一根头发 他们的头像我几乎一样。
我有一个特殊版本的问题可以解决如下:
异常详细信息:System.InvalidOperationException:Sequence不包含任何元素
这个错误是由于有2个项目所带来的 App_Start / NinjectWebCommon.cs
删除文件可以消除错误。
注意:如果你需要,那么你正在努力获得Ninject.Web.Common 为您的一个类库引用Ninject.Web.Common程序集 项目,您可以安全地删除“App_Start”文件夹和 “NinjectWebCommon.cs”。它适用于web / web api项目。
答案 4 :(得分:2)
我的解决方案是我已将App_Start文件夹属性Namespace Provider设置为True。
我已将此更改为False,以便Resharper不会突出显示与文件夹结构不匹配的命名空间。
答案 5 :(得分:2)
想再增加一个原因...
我们将Ninject.MVC3软件包安装到多个项目中 - 其中只有一个是实际的MVC应用程序。但是,我们忘记删除App_Start文件夹。
从引用的项目中删除App_Start文件夹解决了这个问题。
答案 6 :(得分:1)