FluentValidation mehrere Prüfer
Kann ich mehr als einen Prüfer zu einem Objekt? Zum Beispiel:
public interface IFoo
{
int Id { get; set; }
string Name { get; set; }
}
public interface IBar
{
string Stuff { get; set; }
}
public class FooValidator : AbstractValidator<IFoo>
{
public FooValidator ()
{
RuleFor(x => x.Id).NotEmpty().GreaterThan(0);
}
}
public class BarValidator : AbstractValidator<IBar>
{
public BarValidator()
{
RuleFor(x => x.Stuff).Length(5, 30);
}
}
public class FooBar : IFoo, IBar
{
public int Id { get; set; }
public string Name { get; set; }
public string Stuff { get; set; }
}
public class FooBarValidator : AbstractValidator<FooBar>
{
public FooBarValidator()
{
RuleFor(x => x)
.SetValidator(new FooValidator())
.SetValidator(new BarValidator());
}
}
Test.
FooBarValidator validator = new FooBarValidator();
validator.ShouldHaveValidationErrorFor(x => x.Id, 0);
Bekomme ich eine InvalidOperationException
:
Eigenschaft name konnte nicht automatisch ermittelt, für den Ausdruck x => x. Bitte geben Sie entweder eine benutzerdefinierte Eigenschaft namens durch Aufruf von 'Zuordnung Zuname'.
Gibt es eine Möglichkeit dies umzusetzen, oder bin ich versucht zu verwenden FluentValidation in einer Weise, dass es nicht verwendet werden soll?
InformationsquelleAutor Bjarki Heiðar | 2012-11-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
RuleFor versucht, erstellen Sie eine property-level-Regel. Sie können zusätzlich die AddRule-Funktion hinzufügen, um eine Allgemeine Regel.
Mit diesem habe ich eine composite-Regel proof-of-concept. Es nimmt in einer Reihe von anderen Prüfungen und führt Sie aus. Die
yield break
code kam gerade ausFluentValidator
'sDelegateValidator
. Ich war nicht sicher, was zu tun, also habe ich mir, aus der Quelle. Ich habe nicht verfolgen, Ihren Zweck nicht, es scheint aber alles zu funktionieren 🙂- Code
Basis-Test-Fall:
Ich hoffe, das hilft.
Diese Antwort, solange er noch zu funktionieren scheint (mit geringfügigen änderungen), ist ziemlich alt. Gibt es eine built-in Möglichkeit, das zu tun diese noch? Am nächsten, die ich finden konnte war der "Include" - Methode, die Hinzugefügt wurde, aber es nur erlaubt, einschließlich IValidators von der gleichen Art wie der Sie Gehören, so kann nicht verwendet werden, die für mehrere Schnittstellen gemäß dem obigen Beispiel.
InformationsquelleAutor Eli Gassert
Andere Möglichkeit wäre, zu überschreiben, zu Validieren:
InformationsquelleAutor Jeff Smith
Könnten Sie Regelsätzen für die verschiedenen Formen der Validierung, ob das hilft mit dem, was Sie zu tun versuchen:
FluentValidation Regelsätze
InformationsquelleAutor finoutlook