我创建了一个新的 MVC3 项目,按 F5,看到了示例页面。
然后我使用 NuGet 获取 Ninject.MVC extension 。我根据Ninject文档修改了我的global.asax,How To Setup an MVC3 Application :
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 contains no elements.
at System.Linq.Enumerable.Single(...)
at Ninject.Web.Mvc.Bootstrapper.Initialize(...) line 67.
果然,line 67 of that file调用 .Single(),从而抛出异常。
我做错了什么?
最佳答案
我必须补充这一点,希望其他人能够更快地解决问题,而不是像我一样想拔掉他们头上的每一根头发。
我需要重命名项目中的所有内容以匹配新的业务术语。我更改了各处的命名空间,甚至更改了程序集名称(右键单击项目 > 属性 > 应用程序选项卡),以便生成的程序集符合新的命名约定。程序集重命名让 Ninject 非常生气!
通过重命名生成的程序集,我们在编译时会创建一个具有新名称的新文件。然而,旧名称的旧文件仍然在bin目录中!如果您通过 App_Start 中添加的类激活 Ninject,则该激活类将在两个程序集中调用(旧程序集和新重命名程序集)。不要问我如何或为什么,但它确实如此,并且它给你这个“已经初始化”的错误。
甚至清理解决方案都不起作用,因为 Visual Studio 只会删除它生成的二进制文件,这将是新重命名的二进制文件。它让旧的独自坐在那里。
在尝试执行其他操作之前先删除 bin 文件夹!我希望这可以避免其他人浪费宝贵的工作时间!
关于asp.net-mvc-3 - Ninject + MVC3 = InvalidOperationException : Sequence contains no elements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5160946/