【问题标题】:Using ASP.NET MVC 2 with Ninject 2 from scratch从头开始使用带有 Ninject 2 的 ASP.NET MVC 2
【发布时间】:2010-03-25 19:20:45
【问题描述】:

我昨晚刚刚在一个新项目上执行了 File -> New Project。啊,那个 绿色田野的气味。

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

无论如何,我遵循了我能找到的最新建议;一世 在我的 MVC2 项目中引用了 DLL,然后开始工作 全球.asax.cs。首先我让它继承自 NinjectHttpApplication。一世 删除了 Application_Start() 方法,并覆盖了 OnApplicationStarted() 。这是那个方法:

protected override void OnApplicationStarted() 
{ 
    base.OnApplicationStarted(); 
    AreaRegistration.RegisterAllAreas(); 
    RegisterRoutes(RouteTable.Routes); 
    // RegisterAllControllersIn(Assembly.GetExecutingAssembly()); 
} 

我也听从了 VS 的建议,实现了 CreateKernel 方法:

protected override Ninject.IKernel CreateKernel() 
{ 
    // RegisterAllControllersIn(Assembly.GetExecutingAssembly()); 
    return new StandardKernel(); 
} 

就是这样。没有对项目进行其他修改。

你会注意到 RegisterAllControllersIn() 方法被注释掉了 在上面的两个地方。我想我可以用三种不同的方式运行它 组合,都有其时髦的副作用;

  • 像上面那样运行它。

然后我会看到标准的“欢迎使用 ASP.NET MVC”页面 它的所有荣耀。但是,在此页面正确显示后 浏览器,VS向我显示了一个引发的异常。它抛出 NinjectControllerFactory.GetControllerInstance(),被调用 在 controllerType 参数中具有 NULL 值。请注意,这 在呈现 /Home 页面后发生 - 我不知道为什么会这样 再次调用,并通过使用断点我已经确定 GetControllerInstance() 已成功调用 家庭控制器。为什么这个新调用 controllerType 为空?一世 真的不知道。此时按 F5 将我带回 浏览器,没有投诉。

  • 取消注释 RegisterAllControllersIn() 方法 CreateKernel()

这是真正开始变得时髦的地方。现在我得到一个 404 错误。有时我也得到了 ArgumentNullException RegisterAllControllersIn() 行,但这很少见,我有 无法重现它。

  • 取消注释 RegisterAllControllers() 方法 OnApplicationStarted()

(并将注释放回 CreateKernel() 中的注释)

导致的行为看起来与第 1 点完全相同。

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

任何帮助将不胜感激!

(也发布到 Ninject Google Group)

【问题讨论】:

  • Ninject 人员正在修复这个问题。当我全神贯注时,更多!
  • 你为什么不注册像github.com/enkari/ninject.web.mvc(readme.markdown)这样的任何模块? (我在groups.google.com/group/ninject/browse_thread/thread/… 看到过帖子)?
  • 嗨,没有模块的原因是这是一个原始项目,并且将要注入的存储库和其他东西还不存在。设置 MVC 项目后,我做的第一件事基本上是将 Ninject 2 添加到混合中,以确保控制器注入工作,但它没有。所以这就是我的理由。 :)
  • +1 啊,绿色田野的味道。尤其是当它们开始开花时。 ;)

标签: asp.net-mvc-2 ninject-2


【解决方案1】:

我觉得回答自己的问题很肮脏,但为了任何可能陷入这个问题的人的利益......

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

Ian Davis 在极短的时间内解决了这个问题,并且还建议在开发过程中添加一个忽略路由来避免这个问题。只需将以下内容添加到您的路线配置中:

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

希望这对某人有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-06
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    相关资源
    最近更新 更多