如何使用Ninject和MVC4将依赖项注入到FluentValidation AbstractValidator构造函数中?

时间:2014-01-30 16:28:56

标签: c# asp.net-mvc ninject fluentvalidation

我正在使用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文件中创建的。

所以我对如何恰当地实现这一点感到困惑。有人对此有任何澄清吗?感谢。

1 个答案:

答案 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类中的静态变量提供给它的内核实例。

希望有所帮助!