【问题标题】:FluentValidation : custom validator factory and client validationFluentValidation : 自定义验证器工厂和客户端验证
【发布时间】:2012-08-19 19:52:53
【问题描述】:

我有自己的 ValidatorFactory,在 asp net mvc 3 应用程序中实现了结构映射。

public class StructureMapValidatorFactory : ValidatorFactoryBase
{
    public override IValidator CreateInstance(Type validatorType)
    {
        return ObjectFactory.TryGetInstance(validatorType) as IValidator;
    }
}

在全球 asax ...

FluentValidationModelValidatorProvider.Configure(provider => 
{ 
  provider.ValidatorFactory = new StructureMapValidatorFactory(); 
});

好吧,这种组合客户端验证不起作用,如果我使用标准提供程序配置,客户端验证工作正常。

这里有什么解决方法吗?

【问题讨论】:

标签: asp.net-mvc structuremap fluentvalidation


【解决方案1】:

确保您已正确配置 DI 框架以解析验证器。如果ObjectFactory.TryGetInstance(validatorType) 返回 null,则它将不起作用,因为不会有任何与模型关联的验证器,也不会发出元数据。

【讨论】:

  • 好吧,是的,在我的引导程序中,我在结构图中明确注册了每个流利的验证器,但客户端验证仍然不起作用。
  • 您是否在 Configure 方法中调试过您的代码?您是否确保 ObjectFactory.TryGetInstance(validatorType) 不返回 null?我猜你没有,因为恕我直言,这就是你的代码不起作用的原因 => 没有为给定类型返回验证器。不要使用 StructureMap,而是先尝试对相应的验证器进行硬编码:provider.ValidatorFactory = new MyViewModelValidator();
  • 嗯,你是对的,var instance = ObjectFactory.TryGetInstance(validatorType) as IValidator 返回 null
  • 顺便说一句,如果我手动设置验证器 ([Validator(typeof(validation_class))]) 客户端验证工作正常。但是我想在我的验证器类中使用 DI,那么如何正确配置我的结构映射容器?
  • 您不应将[Validator(typeof(validation_class))] 与自定义ValidatorFactory 一起使用。就配置 StructureMap 而言,这是另一个话题 => 您可以提出一个新问题。
【解决方案2】:

最后,忘记在我的 boostrap 中调用 Configure 方法。所以,

ModelValidatorProviders.Providers.Add(new FluentValidationModelValidatorProvider(new StructureMapValidatorFactory()));

然后

FluentValidationModelValidatorProvider.Configure();

【讨论】:

    猜你喜欢
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 2014-03-19
    • 2010-10-16
    相关资源
    最近更新 更多