FluentValidator, как валадировать св-во во втором валидаторе, исходя из первого валидатора?

Для выполнения такой валидации свойств вторым валидатором, исходя из результатов первого валидатора, можно использовать FluentValidation, библиотеку для валидации объектов в C#.

В FluentValidation есть возможность создавать сложные цепочки валидаций, в том числе условные валидации, которые выполняются только при соблюдении определенного условия.

Для начала, убедитесь, что у вас установлена пакет NuGet FluentValidation и приведен using:

using FluentValidation;

Затем создайте класс, который будет представлять ваш объект для валидации. Например, если у вас есть класс Person со свойствами Name и Age, создайте класс-валидатор для этого класса:

public class PersonValidator : AbstractValidator<Person>
{
    public PersonValidator()
    {
        RuleFor(x => x.Name).NotEmpty(); // Первый валидатор для свойства Name

        RuleFor(x => x.Age).NotEmpty().When(x => !string.IsNullOrEmpty(x.Name)); // Второй валидатор для свойства Age, выполняется только при соблюдении условия в первом валидаторе
    }
}

В приведенном выше примере мы определяем два правила валидации. Первое правило гласит, что свойство Name не должно быть пустым. Второе правило накладывает условие на свойство Age, с помощью метода When, и гласит, что оно не должно быть пустым только в том случае, если свойство Name не является пустым.

Теперь вы можете использовать этот валидатор для валидации объектов:

var person = new Person { Name = "John", Age = "" };

var validator = new PersonValidator();
var result = validator.Validate(person);

if (!result.IsValid)
{
    foreach (var failure in result.Errors)
    {
        Console.WriteLine($"Property {failure.PropertyName} failed validation. Error: {failure.ErrorMessage}");
    }
}
else
{
    Console.WriteLine("Validation successful");
}

В этом коде мы создаем новый объект Person и передаем его в validator.Validate(). Затем мы проверяем результат валидации и выводим соответствующее сообщение, в зависимости от того, прошла ли валидация успешно или нет.

При запуске данного кода вы увидите, что второе свойство Age проходит валидацию только при соблюдении условий из первого валидатора для свойства Name.

Таким образом, с помощью FluentValidation вы можете выполнять валидацию свойств вторым валидатором, исходя из результатов первого валидатора, используя условные правила валидации. Это дает гибкость в контроле над процессом валидации и обеспечивает более точную и эффективную проверку данных.