MVC C# - 用于多个AbstractValidator <t>的FluentValidation复合验证器

时间:2015-08-06 15:18:37

标签: c# asp.net-mvc validation fluentvalidation

我有一个MVC应用程序,每个视图模型有很多 public class reverse{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); System.out.println("enter string"); String s = sc.nextLine(); String [] words = s.split(" "); // space for words for(int i = words.length - 1; i >= 0; i--) { System.out.print(words[i] + " "); } } } 个。这是设计原因,因为我使用AbstractValidator<T>注入查询以访问我们的数据库,并且我不想在一个验证器中使用构造函数注入。我创建了下面的类,它是每个视图模型的验证器,但它不调用我的SimpleInjector和其他自定义验证规则,只调用简单规则。任何帮助将不胜感激。谢谢。

When

以下是两个验证器的示例

public class CompositeValidator<T> : AbstractValidator<T>
  {
    private ICollection<IValidator> _validators = new List<IValidator>();

    public CompositeValidator(IEnumerable<IValidator<T>> validators = null)
    {
      if (validators == null) return;

      foreach (var validator in validators)
        {
        _validators.Add(validator);

        var enumerator = validator.GetEnumerator();

        while (enumerator.MoveNext())
        {
          AddRule(enumerator.Current);
        }
      }
    }

    public override ValidationResult Validate(ValidationContext<T> context)
    {
      var errorsFromOtherValidators = _validators.SelectMany(x => x.Validate(context).Errors);

      return new ValidationResult(errorsFromOtherValidators );
    }
  }

1 个答案:

答案 0 :(得分:0)

这实际上有效。我发现了一个我忘记的验证拦截器没有触发我的验证。