2017-02-17 53 views
3

我正在使用带有内置容器的ASP.NET Core。如何在ASP.NET Core中手动注册FluentValidation验证器?

登记应该做like so

services 
    .AddMvc() 
    .AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<Startup>()) 

这会自动1)配置FluentValidation,和2)登记在组件中找到的所有验证器。

但我想手动注册我的验证器。我怎么做?

回答

0
// must first setup FV 
services 
    .AddMvc() 
    .AddFluentValidation(fv => {}); 

// can then manually register validators 
services.AddTransient<IValidator<Foo>, FooValidator>(); 
services.AddTransient<IValidator<Bar>, BarValidator>(); 
2

您将要开始考虑使用ValidatorFactory。因此,而不是您的通话增添FluentValidation的,您的通话将是这个样子:

.AddFluentValidation(fv => fv.ValidatorFactory = new MyValidatorFactory())

您需要在您的IOC容器注册您的验证。在您的自定义ValidatorFactory实现中,您将需要重写CreateInstance并让它使用IOC容器为您解析验证器。

https://github.com/JeremySkinner/FluentValidation/wiki/i.-IoC

+0

其实我想的东西要简单得多,其工作原理:'services.AddTransient ,FooValidator>();'我很好奇,为什么它的工作原理,以及为什么你的方式是否正确? – grokky

+0

当你添加你的验证器时,你是否还在调用'.AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining ())' – Stout01

+0

不,我删除了自动注册。然后手动注册每一个。它只是起作用。但是我担心'RegisterValidatorsFromAssemblyContaining'会做更多我缺少的东西,并且会在运行时崩溃。 – grokky