2016-08-31 3 views
3

Mit FluentValidation und einer Custom() Regel möchte ich in der Lage sein, eine Auflistung untergeordneter Objekte zu validieren und für jedes untergeordnete Objekt, das ungültig ist, eine ValidationFailure zurückgeben.Gibt mehrere Validierungsfehler von einer einzelnen Custom() Regel zurück?

Ich kann einen Collection-Validator nicht verwenden, da das untergeordnete Objekt nicht die richtigen Informationen zum Ausführen der Regel enthält - es muss im Kontext des übergeordneten Elements ausgeführt werden.

Allerdings die Custom() API beschränkt mich auf die Rückkehr einer einzigen ValidationFailure oder gar nichts.

Gibt es ein Muster, das ich verwenden kann, dass eine einzelne Regel mehrere Fehler generieren kann?

+0

ich habe zu diesem Punkt schon erreicht. Gibt es eine Lösung? – krishna

Antwort

0

Ich fand eine gute Lösung - verwenden Sie AddRule() mit einem 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; 
    } 
} 
Verwandte Themen