簡體   English   中英

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM