【发布时间】: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 啊,绿色田野的味道。尤其是当它们开始开花时。 ;)