我有一个 asp.net MVC 4.5 应用程序,使用 Castle.Windsor 3.2.2 作为 DI,我第一次尝试添加 FluentValidation 版本 5.0.0.1。
我创建了继承自 ValidatorFactoryBase 的工厂
public class WindsorFluentValidatorFactory : ValidatorFactoryBase
{
private readonly IKernel _kernel;
public WindsorFluentValidatorFactory(IKernel kernel)
{
_kernel = kernel;
}
public override IValidator CreateInstance(Type validatorType)
{
return _kernel.HasComponent(validatorType)
? _kernel.Resolve<IValidator>(validatorType)
: null;
}
}
还创建了 Castle 的安装程序:
public class FluentValidatorsInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Classes
.FromThisAssembly()
.BasedOn(typeof(IValidator<>))
.WithService
.Base());
}
}
现在,在 Global.asax 中,我尝试(按照网络上的文档)挂钩如下内容:
var fluentValidationModelValidatorProvider = new FluentValidationModelValidatorProvider(new WindsorFluentValidatorFactory(container.Kernel));
ModelValidatorProviders.Providers.Add(fluentValidationModelValidatorProvider);
然而,第二行给出了以下错误:
“最佳重载方法匹配
'System.Collections.ObjectModel.Collection.Add(System.Web.Mvc.ModelValidatorProvider)'
有一些无效参数 参数 1:无法转换自
'FluentValidation.Mvc.WebApi.FluentValidationModelValidatorProvider'
到“System.Web.Mvc.ModelValidatorProvider”
所以,这种方法似乎不适用于我使用的版本。
我还尝试使用配置方法来挂钩它:
FluentValidationModelValidatorProvider.Configure(x => x.ValidatorFactory = new WindsorFluentValidatorFactory(container.Kernel));
但是,它不起作用。调试我在 ModelValidatorProviders.Providers 进行了检查,发现没有使用配置方法添加新的提供程序。
关于我可能做错了什么有什么想法吗?
谢谢,
Andres
解决了
我在另一个论坛中找到了解决方案,但我会发布对其他人有用的答案。
我使用了错误的提供商
有两种提供程序 - 一种用于 MVC,另一种用于 WebApi。看来我用的是WebAPI。
修改为FluentValidation.Mvc.FluentValidationModelValidatorProvide,问题解决