我正在使用Ninject 3.0.1.10,MVC 5.0.0,FluentValidation 5.0以及最终的FluentValidation MVC插件库。
我正在尝试配置Ninject,以便它将服务注入我的AbstractValidator
类。我已经阅读了很多关于如何做到这一点的其他答案,但没有一个对我有意义。他们都提到AssemblyScanner
,这是我找不到的。他们还提到从IKernal
访问App_Start
,但在我的项目中App_Start
无法访问IKernal
,因为它是在NinjectWebCommon.cs
文件中创建的。
所以我对如何恰当地实现这一点感到困惑。有人对此有任何澄清吗?感谢。
答案 0 :(得分:2)
您可以在应用中的任何位置访问由IKernel
配置的NinjectWebCommon.cs
。当然,这通常不推荐,因为它是服务定位器反模式的气味。
但有些情况下我们无法摆脱它,特别是在混合框架和组合根时,没关系。
因此,无论您需要什么,只需使用:
using Ninject;
//My class that will need access to the IKernel
var kernel = (new Bootstrapper()).Kernel;
Bootstrapper
类在App_Start.NinjectWebCommon
之前初始化甚至Application_OnStart
运行。因此,即使在Global.asax
中使用也可以安全地获取对IKernel
的引用。它会记住通过Bootstrapper类中的静态变量提供给它的内核实例。
希望有所帮助!