Asp.net mvc 3 什么';为MVC3应用程序配置Ninject的正确方法是什么?

Asp.net mvc 3 什么';为MVC3应用程序配置Ninject的正确方法是什么?,asp.net-mvc-3,ninject,webactivator,Asp.net Mvc 3,Ninject,Webactivator,我读过几篇关于为MVC3项目设置Ninject的文章 有些人说您的Global.asax.cs应该继承自NinjectHttpApplication,其他人则在通过应用程序_Start()构建标准内核时注册模块 我个人使用了NuGet,它以不同的方式创建了一个AppStart\u NinjectMVC3类,并使用 [assembly: WebActivator.PreApplicationStartMethod(typeof(MyApp.AppStart_NinjectMVC3), "Start

我读过几篇关于为MVC3项目设置Ninject的文章

有些人说您的Global.asax.cs应该继承自NinjectHttpApplication,其他人则在通过应用程序_Start()构建标准内核时注册模块

我个人使用了NuGet,它以不同的方式创建了一个AppStart\u NinjectMVC3类,并使用

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

每个问题都有什么优点/缺点吗?

我一直在寻找同一个问题的答案,但似乎自己也找到了一个像样的答案。顺便说一句:我是MVC,Ninject,DI n00b,所以如果我离这里很远的话,请随时向我开枪,但我想我已经基本明白了

System.Web中已存在“PreApplicationStartMethod”属性,甚至可以在应用程序启动()之前使用该属性运行方法。这意味着它对DI内容非常有用,因为您可能已经需要在应用程序_start()中开始注入,并且通过使用preapplicationstart方法,您可以将注入内容保留在应用程序_start()之外,并确保在应用程序启动时首先开始注入

问题是微软只允许一个方法被标记这个属性,他们承认这是一个设计缺陷。这就是为什么他们创建了WebActivator类来规避这个短消息

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

此方法与仅在应用程序_Start()中构建内核几乎相同,但Ninject的内容在前面已经介绍过了

通过重写NinjectHttpApplication,您可以让Ninject为您执行许多与MVC相关的绑定工作,如绑定HttpContext等。据我所知,使用WebActivavtor/Application_Start()方法,您必须自己完成这项工作

一些好的链接:


伊恩和我最近几天一直在忙着这个话题
Ninject.Web.Mvc
Ninject.MVC3
已经合并。仍然有两种方法可以从
NinjectHttpApplication
派生或安装nuget软件包。但现在它们基于相同的代码,因此具有相同的特性。有关更多详细信息,请参阅我的博客帖子: