FluentValidation,是否可以进行内联验证?

FluentValidation, is possible an inline validation?

我有以下操作:

public void Save (Customer c, IEnumerable <Product> products)
{
    // Validate that you have entered at least one product.
    if (!produtos.Any())
        throw new ArgumentOutOfRangeException("products");
}

内联,不使用继承(例如 AbstractValidator ),就像使用 FluentValidation 库的相同操作一样?

我认为这种验证是不可能的,如果你有一个 属性 类型 IEnumerable<Product> 的对象,你可以使用 FluentValidation 检查对象是否至少有一个产品。

例如

public class ProductList
{
  IEnumerable<Product> Products {get;set;}

    var Validator = new ProductListValidator();
    public bool IsValid
    {
        get
        {
            var res = Validator.Validate(this);
            return res.IsValid;
        }
    }

    public IList<ValidationFailure> ValidationResult
    {
        get
        {
            var res = Validator.Validate(this);
            return res.Errors;
        }
    }
}

   public class ProductListValidator : AbstractValidator<ProductList>
   {
      public ProductListValidator()
      {
          RuleFor(i => i.Products).Must(i => i.HasAny()).WithMessage("Your Error Meesage");
      }

   }

然后

public void Save (Customer c, ProductList products)
{
    // Validate that you have entered at least one product.
    if (!ProductList.IsValid)
    {
        ReturnErrorSummary(ProductList.ValidationResult);
    }
}

尚不支持:

public void DoOperation(List<string> strings)
{ 
    var validator = new InlineValidator<List<string>>();
    validator.RuleFor(l => l).Must(l => l.Any()).WithMessage("No one");
    validator.ValidateAndThrow(strings)     
}

在这种情况下,我们必须手动抛出 ValidationException。

喜欢:

public void DoOperation(List<string> strings)
{ 
    if (!strings.Any())
    {
        var failures = new List<ValidationFailure>();
        failures.Add(new ValidationFailure("strings", "Must have at less one."));

        throw new ValidationException(failures);
    }
}

参见:

https://fluentvalidation.codeplex.com/discussions/579227

var validator = new InlineValidator<Person>();

validator.RuleSet("SomeRuleset", ()=>{
  validator.RuleFor(x=>x.Name)...etc
});

https://github.com/FluentValidation/FluentValidation/issues/563