为MVC3应用程序配置Ninject的正确方法是什么?

时间:2011-02-21 10:23:38

标签: asp.net-mvc-3 ninject webactivator

我已经阅读了几篇关于Ninject for MVC3项目设置的文章。

有人说你的Global.asax.cs应该继承自 NinjectHttpApplication ,其他人则在通过Application_Start()构建 StandardKernel 时注册模块。

我个人使用NuGet,它以不同的方式创建 AppStart_NinjectMVC3 类,并使用

启动它
[assembly: WebActivator.PreApplicationStartMethod(typeof(MyApp.AppStart_NinjectMVC3), "Start")]

每个都有任何优点/缺点吗?

2 个答案:

答案 0 :(得分:6)

在过去几天里,伊恩和我一直忙于讨论这个话题。 Ninject.Web.MvcNinject.MVC3已合并。仍然有两种方法可以从NinjectHttpApplication派生或安装nuget包。但现在它们基于相同的代码,因此它们具有相同的功能。请参阅我的博客文章了解更多详情:

http://www.planetgeek.ch/2011/02/22/ninject-mvc3-and-ninject-web-mvc3-merged-to-one-package/

答案 1 :(得分:2)

我正在寻找同一问题的答案,但似乎自己找到了一个不错的答案。顺便说一下:我是MVC,Ninject,DI n00b所以如果我离开这里的话,请随时给我开枪,但我想我已经弄明白了。

“PreApplicationStartMethod”属性已存在于System.Web中,甚至可以在Application_Start()之前用于运行方法。这意味着它非常适合DI的东西,因为你可能需要在Application_Start()中开始注入,并且通过使用PreApplicationStartMethod,你可以将注入的东西保留在Application_Start()之外,并确保它是第一个启动的东西。你的申请开始了。

问题是Microsoft只允许使用此属性标记1个方法,他们承认这是一个设计缺陷。这就是为什么他们创建WebActivator类来绕过这个短缺的原因。

允许将多个方法标记为PreApplicationStartMethod的一个好处是,可以将需要初始化的NuGet包插入应用程序而不触及现有代码,只需使用PreApplicationStartMethod的WebActivator版本标记某种初始化方法即可属性。

这个方法与在Application_Start()中构建内核几乎相同,但Ninject的内容早先就开始了。

通过重写NinjectHttpApplication,您可以让Ninject为您执行许多常见的MVC相关绑定作业,例如绑定HttpContext等。使用WebActivavtor / Application_Start()方法,您必须自己完成此操作。

一些好的链接: