Скажем, у меня есть классы, как это:Есть ли способ сделать FluentValidation прекратить обработку других правил без установки CascadeMode для всех правил?
public class ParentClass
{
public ChildClass Child { get; set; }
public DateTime Date { get; set; }
}
public class ChildClass
{
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
И валидатор так:
public class ParentClassValidator : AbstractValidator<ParentClass>
{
public ParentClassValidator()
{
RuleFor(x => x.Child).NotNull();
RuleFor(x => x.Date).Must((parent, date) =>
date < parent.Child.EndDate && date > parent.Child.StartDate);
// ...other rules.
}
}
Можно сказать FluentValidation остановить проверку правил, если первый не удается (например, для детей является нулевым) , но выполнять все другие правила, независимо от отказа, если это пройдет?
то я действительно хочу что-то вроде:
public ParentClassValidator()
{
RuleFor(x => x.Child).NotNull().StopOnFailure();
RuleFor(x => x.Date).Must((parent, date) => date < parent.Child.EndDate && date > parent.Child.StartDate);
// ...other rules.
}
Я знаю, что я могу установить CascadeMode = CascadeMode.StopOnFirstFailure, но это будет сделать все неудачи правило прекратить проверку. Честно говоря, в этом случае я просто хочу сохранить FluentValidation из того, что выбрал исключение из-за попытки получить доступ к parent.Child, который он уже знает как null!
Для этого примера вы должны иметь возможность использовать [When] (http://fluentvalidation.codeplex.com/wikipage?title=Customizing&referringTitle=Documentation&ANCHOR#WhenUnless), хотя для этого потребуется дублировать непустую проверку между валидацией и когда предикат. –
Bleh. Это не очень чистый способ сделать это :(Я подозреваю, что это единственный способ. – adhocgeek
Я подозреваю это также: см. Http://fluentvalidation.codeplex.com/discussions/352581 –