Jud*_*ngo 89 ninject asp.net-mvc-3
我创建了一个新的MVC3项目,点击F5,看到了示例页面.
然后我使用NuGet获得Ninject.MVC扩展.我根据Ninject文档,如何设置MVC3应用程序修改了我的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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在当我运行应用程序时,我得到了死亡的黄色屏幕,但有以下异常:
InvalidOperationException - Sequence不包含任何元素.
在System.Linq.Enumerable.Single(...)
在Ninject.Web.Mvc.Bootstrapper.Initialize(...)第67行.
当然,该文件的第67行调用.Single(),从而抛出异常.
我究竟做错了什么?
Che*_*hev 120
我必须补充一点,希望别人能够更快地解决问题而不想像我几乎那样把头发上的每一根头发拉出来.
我需要重命名项目中的所有内容以匹配新的业务术语.我在任何地方更改了名称空间,我甚至更改了程序集名称(右键单击项目>属性>应用程序选项卡),以便生成的程序集与新的命名约定匹配.组件重命名是让Ninject非常生气的原因!
通过重命名生成的程序集,我们在编译时创建了一个带有新名称的新文件.但是,旧文件的旧文件仍在bin目录中!如果您通过App_Start中添加的类激活Ninject,则将在BOTH程序集(旧的和新重命名的程序集)中调用此激活类.不要问我怎么或为什么,但确实如此,它会给你这个"已经初始化"的错误.
甚至清洁解决方案都不起作用,因为Visual Studio只会删除它正在生成的二进制文件,这将是新重命名的二进制文件.它只留下旧的那些只是坐在那里.
在尝试执行任何其他操作之前,请删除bin文件夹!我希望这可以节省其他人浪费宝贵的工作时间!
Dar*_*rov 101
您可能会注意到在安装ninject.mvc3
NuGet 之后,在App_Start
项目中创建了一个包含NinjectMVC3.cs
文件的子文件夹.删除此文件夹,然后重试.以下是我遵循的步骤:
install-package ninject.mvc3
在命令行上键入Global.asax
您问题中的代码替换默认代码AppStart
在安装程序包期间创建的子文件夹/Home/Index
在Google Chrome网络浏览器中打开的默认页面的美感:-)Rem*_*oor 23
我已经更新了您的问题中链接的文档Wiki,以显示设置MVC3应用程序的两种方法.我建议使用第二个选项,这是NuGetpackage的首选方式.
它不是从NinjectHttpApplication派生而是使用AppStart文件夹中的NinjectMVC.cs,它是在安装包时创建的.这也是您创建内核的位置以及加载模块的位置或定义绑定的位置.