2015-02-02 3 views
0

У меня есть следующая операция:FluentValidation, возможно встроенная проверка?

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

Inline, без использования наследования (например, AbstractValidator), будет в этом же операции с использованием библиотеки FluentValidation?

ответ

0

Это еще не поддерживается:

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

1

Я думаю, что такая проверка невозможна, если у вас есть объект, имеющий свойство типа 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); 
    } 
} 
+0

Спасибо за ответ. Да, это еще не поддерживается. См.: https://fluentvalidation.codeplex.com/discussions/579227 –