我一直在寻找同一个问题的答案,但我自己似乎找到了一个不错的答案。顺便说一句:我是一名 MVC、Ninject、DI n00b,所以如果我离开这里,请随意向我开枪,但我想我已经很清楚了。
System.Web 中已经存在“PreApplicationStartMethod”属性,甚至可以在 Application_Start() 之前运行方法。这意味着它对 DI 非常有用,因为您可能已经需要在 Application_Start() 中开始注入,并且通过使用 PreApplicationStartMethod,您可以将注入的东西排除在 Application_Start() 之外,并确保它是第一个开始的时间您的应用程序启动。
问题是微软只允许用这个属性标记一种方法,他们承认这是一个设计缺陷。这就是为什么他们创建了 WebActivator 类来规避这个缺点。
允许将多个方法标记为 PreApplicationStartMethod 的好处之一是可以将需要初始化的 NuGet 包插入到您的应用程序中,而无需触及现有代码,只需使用 PreApplicationStartMethod 属性的 WebActivator 版本标记某种初始化方法即可。
这种方法与在 Application_Start() 中构建内核几乎相同,但 Ninject 的东西更早开始。
通过覆盖 NinjectHttpApplication,您可以让 Ninject 为您执行许多常见的与 MVC 相关的绑定工作,例如绑定 HttpContext 等。据我所知,使用 WebActivavtor/Application_Start() 方法您必须自己执行此操作。
一些很好的链接: