使用Castle.Windsor设置FluentValidation的问题

时间:2014-03-07 17:35:18

标签: c# asp.net-mvc castle-windsor fluentvalidation

我有一个带有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并解决了问题

0 个答案:

没有答案