Я не думаю, что есть хороший способ сделать это встроенным. Дочерние правила не позволяют передавать родительский объект. Must
, и я думаю, что Custom
(возможно, через context.ParentContext.InstanceToValidate
) позволит вам добавить правила (правила), касающиеся как родителя, так и потомка, но правило (правила) будет против коллекции, а не против каждого элемента. Лучший способ и то, как я обычно это делал бы, это создать дочерний валидатор для вашей Load
сущности:
public class LoadValidator : AbstractValidator<Load>
{
public LoadValidator(InputData inputData)
{
RuleFor(load => load.Position)
.GreaterThan(0).WithMessage("Position must be greater than 0")
.LessThan(inputData.Ucl).WithMessage("Position must be less than Ucl");
}
}
. Это становится многоразовым и намного проще для тестирования. Затем используйте SetValidator
, чтобы использовать его.
public class InputDataValidator : AbstractValidator<InputData>
{
public InputDataValidator()
{
RuleFor(inputData => inputData.Ucl)
.GreaterThan(0).WithMessage("Ucl must be greater than 0");
RuleForEach(inputData => inputData.Loads)
.SetValidator(inputData => new LoadValidator(inputData));
}
}
Многоразовые валидаторы свойств может быть другим способом сделать это, но для меня это должен быть достаточно высокий уровень / generi c дело, которое нужно реализовать.