我有一个带有Castle.Windsor 3.2.2的asp.net MVC 4.5应用程序作为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'“
所以,这种做法似乎不适用于我使用的版本。
我还尝试使用Configure方法将其挂钩:
FluentValidationModelValidatorProvider.Configure(x => x.ValidatorFactory = new WindsorFluentValidatorFactory(container.Kernel));
然而,它不起作用。调试我在ModelValidatorProviders.Providers上检查过,并且没有使用Configure方法添加新的提供程序。
关于我可能做错的任何想法? 谢谢,
安德烈
解决 我在另一个论坛得到了解决方案,但我会发布答案,这对其他人有用。 我使用的是错误的提供商 有两个提供者 - 一个用于MVC,一个用于WebApi。我似乎正在使用WebAPI。
将其更改为FluentValidation.Mvc.FluentValidationModelValidatorProvide并解决了问题