首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >InvalidOperationException+ MVC3 = Ninject :序列不包含元素

InvalidOperationException+ MVC3 = Ninject :序列不包含元素
EN

Stack Overflow用户
提问于 2011-03-02 06:03:38
回答 7查看 21.2K关注 0票数 90

我创建了一个新的MVC3项目,点击F5,看到了示例页面。

然后我使用NuGet获取Ninject.MVC extension。我根据the对象文档How To Setup an MVC3 Application修改了我的global.asax:

代码语言:javascript
复制
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序列不包含任何元素。

在System.Linq.Enumerable.Single(...)

在Ninject.Web.Mvc.Bootstrapper.Initialize(...)67行。

果然,line 67 of that file调用了.Single(),从而抛出了异常。

我做错了什么?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-03-02 06:18:18

您可能会注意到,在安装ninject.mvc3 NuGet之后,会在项目中创建一个包含NinjectMVC3.cs文件的App_Start子文件夹。请删除此文件夹,然后重试。下面是我遵循的步骤:

  1. 使用默认模板创建新的Windows MVC3项目
  2. 调出包管理器控制台窗口(查看其他-> ->包管理器控制台)
  3. 在命令行上键入install-package ninject.mvc3
  4. 用安装包期间创建的D15子文件夹中的代码替换<代码>D12中的默认代码< code >H216<代码>H117运行Google Chrome web浏览器中打开的D20默认页面的美感:-)
票数 101
EN

Stack Overflow用户

发布于 2012-03-01 15:29:02

我不得不补充这一点,希望其他人能更快地解决这个问题,而不是像我几乎那样拔出他们头上的每一根头发。

我需要重命名项目中的所有内容,以匹配新的业务术语。我在任何地方都更改了名称空间,甚至还更改了程序集名称(右键单击project > properties > application tab),以便生成的程序集符合新的命名约定。程序集的重命名让Ninject非常生气!

通过重命名生成的程序集,我们在编译时创建了一个具有新名称的新文件。但是,具有旧名称的旧文件仍然在bin目录中!如果你在App_Start中通过添加的类激活了Ninject,那么这个激活类将在两个程序集中被调用(旧的和新的被重命名的)。不要问我是怎么做的或者为什么,但是它会这样做,它会给你这个“已初始化”的错误。

即使是清理解决方案也不起作用,因为Visual Studio只会删除它正在生成的二进制文件,这将是新的重命名的二进制文件。只剩下老的坐在那里了。

在你尝试做任何其他事情之前,去删除你的bin文件夹!我希望这能让其他人免于浪费宝贵的工作时间!

票数 120
EN

Stack Overflow用户

发布于 2011-03-02 07:43:59

我已经更新了您问题中链接的文档,以展示设置MVC3应用程序的两种方法。我建议使用第二种方法,这是theNuGetpackage的首选方法。

它不是从NinjectHttpApplication派生的,而是使用AppStart文件夹中的NinjectMVC.cs,该文件夹是在安装包期间创建的。这也是您创建内核、加载模块或定义绑定的位置。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5160946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档