Asp.net mvc 2 从头开始使用ASP.NET MVC 2和Ninject 2

Asp.net mvc 2 从头开始使用ASP.NET MVC 2和Ninject 2,asp.net-mvc-2,ninject-2,Asp.net Mvc 2,Ninject 2,我昨天晚上刚做了一个新项目的文件->新项目。啊,这个 绿色田野的气味 我使用的是刚刚发布的ASP.NET MVC 2(即没有预览版或发布版) 我想我会有一个好的开始 使用带有MVC扩展的Ninject 2(也是发布版本)。我 下载了MVC扩展项目,在VS2008Sp1中打开它,构建 它处于发布模式,然后进入mvc2\build\release文件夹 并将Ninject.dll和Ninject.Web.Mvc.dll从那里复制到 我的项目上的Libraries文件夹(以便我可以在 源代码管理,并且

我昨天晚上刚做了一个新项目的文件->新项目。啊,这个 绿色田野的气味

我使用的是刚刚发布的ASP.NET MVC 2(即没有预览版或发布版) 我想我会有一个好的开始 使用带有MVC扩展的Ninject 2(也是发布版本)。我 下载了MVC扩展项目,在VS2008Sp1中打开它,构建 它处于发布模式,然后进入mvc2\build\release文件夹 并将Ninject.dll和Ninject.Web.Mvc.dll从那里复制到 我的项目上的Libraries文件夹(以便我可以在 源代码管理,并且始终在任何地方都有正确的版本)。我没有 包括相应的.xml文件-我应该吗?他们只是提供 智能感知,还是其他功能?我相信没什么大不了的

总之,我遵循了我能找到的最新建议;我 在我的MVC2项目中引用了DLL,然后开始工作 Global.asax.cs。首先,我让它从NinjectHttpApplication继承。我 删除了Application_Start()方法,改为重写applicationstarted()。以下是该方法:

protected override void OnApplicationStarted() 
{ 
    base.OnApplicationStarted(); 
    AreaRegistration.RegisterAllAreas(); 
    RegisterRoutes(RouteTable.Routes); 
    // RegisterAllControllersIn(Assembly.GetExecutingAssembly()); 
} 
protected override Ninject.IKernel CreateKernel() 
{ 
    // RegisterAllControllersIn(Assembly.GetExecutingAssembly()); 
    return new StandardKernel(); 
} 
我还遵循了VS的建议,实现了CreateKernel 方法:

protected override Ninject.IKernel CreateKernel() 
{ 
    // RegisterAllControllersIn(Assembly.GetExecutingAssembly()); 
    return new StandardKernel(); 
} 
仅此而已。没有对项目进行其他修改

您会注意到RegisterAllControllersIn()方法被注释 在上面两个地方。我想我可以用三种不同的方式运行它 组合,都有其令人生厌的副作用

  • 像上面那样运行它
然后,我将在中看到标准的“欢迎使用ASP.NET MVC”页面 它所有的荣耀。但是,在正确显示此页面后 浏览器,VS向我显示了引发的异常。它投进去了 调用的NinjectControllerFactory.GetControllerInstance() 在controllerType参数中使用空值。注意这个 在呈现/主页之后发生-我不知道为什么会这样 再次调用,通过使用断点,我已经确定 已成功为调用GetControllerInstance() 家庭控制器。为什么这个controllerType为null的新调用?我 我真的不知道。此时按F5可将我带回到 没有人抱怨

  • 在中取消对RegisteralControllerSin()方法的注释 CreateKernel()
这就是东西真正开始变得时髦的地方。现在我有一个404 错误。有时,我也会在 RegisterAllControllersIn()行,但这非常罕见,我有 我们无法复制它

  • 在中取消对RegisteralController()方法的注释 OnApplicationStarted()
(并将注释放回CreateKernel()中的注释)

导致的行为与第1点中的行为完全相同

因此,为了避免永远继续下去,是否有一个确切的步骤 关于如何使用Ninject 2(均为非测试版)设置MVC 2项目的指南 发布版本)以获取Ninject提供的控制器?属于 当然,我将开始提供一些实际的注射材料 (比如ISession对象和存储库、记录器等),但我认为 我会先让它工作

任何帮助都将不胜感激


(也发到了Ninject谷歌集团)

回答我自己的问题时,我感到很不自在,但为了任何可能陷入这一困境的人的利益

这不是一个Ninject问题,实际上,这似乎是Cassini(内置于VS2k8中的web服务器)的问题,它处理这些请求的方式与IIS处理请求的方式不同。最基本的原因是应用程序收到了一个favicon.ico的请求,Cassini将该请求发送给MVC,Ninject不知道如何处理该请求

Ian Davis在令人印象深刻的短时间内解决了这个问题,并且还建议添加一个忽略路径,以避免在进行开发时出现这个问题。只需将以下内容添加到路由配置中:

routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });

希望这对别人有帮助

这件事正在被Ninject的人解决。当我把我的头都缠在上面的时候,我会感觉到更多!为什么你没有注册任何像(readme.markdown)这样的模块?(我在上看到了线程)?嗨,没有模块的原因是这是一个处女项目,存储库和其他将被注入的东西还不存在。在设置MVC项目之后,我做的第一件事基本上是将Ninject 2添加到混合中,以确保控制器注入工作,但实际上没有。这就是我的理由+1为啊,绿色田野的气息。尤其是当它们开始开花的时候