我创建了一个新的MVC3项目,点击F5,看到了示例页面。
然后我使用NuGet获取Ninject.MVC extension。我根据the对象文档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序列不包含任何元素。
在System.Linq.Enumerable.Single(...)
在Ninject.Web.Mvc.Bootstrapper.Initialize(...)67行。
果然,line 67 of that file调用了.Single(),从而抛出了异常。
我做错了什么?
发布于 2011-03-02 06:18:18
您可能会注意到,在安装ninject.mvc3
NuGet之后,会在项目中创建一个包含NinjectMVC3.cs
文件的App_Start
子文件夹。请删除此文件夹,然后重试。下面是我遵循的步骤:
install-package ninject.mvc3
发布于 2012-03-01 15:29:02
我不得不补充这一点,希望其他人能更快地解决这个问题,而不是像我几乎那样拔出他们头上的每一根头发。
我需要重命名项目中的所有内容,以匹配新的业务术语。我在任何地方都更改了名称空间,甚至还更改了程序集名称(右键单击project > properties > application tab),以便生成的程序集符合新的命名约定。程序集的重命名让Ninject非常生气!
通过重命名生成的程序集,我们在编译时创建了一个具有新名称的新文件。但是,具有旧名称的旧文件仍然在bin目录中!如果你在App_Start中通过添加的类激活了Ninject,那么这个激活类将在两个程序集中被调用(旧的和新的被重命名的)。不要问我是怎么做的或者为什么,但是它会这样做,它会给你这个“已初始化”的错误。
即使是清理解决方案也不起作用,因为Visual Studio只会删除它正在生成的二进制文件,这将是新的重命名的二进制文件。只剩下老的坐在那里了。
在你尝试做任何其他事情之前,去删除你的bin文件夹!我希望这能让其他人免于浪费宝贵的工作时间!
发布于 2011-03-02 07:43:59
我已经更新了您问题中链接的文档,以展示设置MVC3应用程序的两种方法。我建议使用第二种方法,这是theNuGetpackage的首选方法。
它不是从NinjectHttpApplication派生的,而是使用AppStart文件夹中的NinjectMVC.cs,该文件夹是在安装包期间创建的。这也是您创建内核、加载模块或定义绑定的位置。
https://stackoverflow.com/questions/5160946
复制相似问题