我已经阅读了几篇关于Ninject for MVC3项目设置的文章。
有人说你的Global.asax.cs应该继承自 NinjectHttpApplication ,其他人则在通过Application_Start()构建 StandardKernel 时注册模块。
我个人使用NuGet,它以不同的方式创建 AppStart_NinjectMVC3 类,并使用
启动它[assembly: WebActivator.PreApplicationStartMethod(typeof(MyApp.AppStart_NinjectMVC3), "Start")]
每个都有任何优点/缺点吗?
答案 0 :(得分:6)
Ninject.Web.Mvc
和Ninject.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()方法,您必须自己完成此操作。
一些好的链接: