2016-08-31 2 views
3

En utilisant FluentValidation et une règle Custom(), je souhaite pouvoir valider une collection d'objets enfants et renvoyer un ValidationFailure pour chaque objet enfant non valide.Renvoyer plusieurs échecs de validation à partir d'une seule règle Custom()?

Je ne peux pas utiliser un validateur de collection car l'objet enfant ne contient pas les bonnes informations pour exécuter la règle. Il doit s'exécuter dans le contexte du parent.

Cependant l'API Custom() me limite à renvoyer un seul ValidationFailure ou rien du tout.

Y a-t-il un modèle que je peux utiliser qui permet à une seule règle de générer plusieurs erreurs?

+0

J'ai aussi atteint ce point. y-a-t'il une solution ? – krishna

Répondre

0

J'ai trouvé une bonne solution - utilisez AddRule() avec un DelegateValidator.

public MyValidator : AbstractValidator<MyClass> 
{ 
    public MyValidator() 
    { 
     AddRule(new DelegateValidator<MyClass>(MyRule)); 
    } 

    private IEnumerable<ValidationFailure> MyRule(
     MyClass instance, 
     ValidationContext<MyClass> context) 
    { 
     var result = new List<ValidationFailure>(); 

     // add as many failures to the list as you want: 
     var message = "This is not a valid message"; 
     result.Add(new ValidationFailure(nameof(MyClass.SomeProperty), message)); 

     return result; 
    } 
}