A validação fluente oferece suporte à validação condicional, basta usar a cláusula When para verificar o valor do campo secundário:
https://fluentvalidation.net/start#conditions
Especificando uma condição com Quando / A menos Os métodos Quando e A menos podem ser usados para especificar as condições que controlam quando a regra deve ser executada. Por exemplo, esta regra na propriedade CustomerDiscount só será executada quando IsPreferredCustomer for verdadeiro:
RuleFor(customer => customer.CustomerDiscount)
.GreaterThan(0)
.When(customer => customer.IsPreferredCustomer);
O método A menos é simplesmente o oposto de Quando.
Você também pode usar a operação .SetValidator para definir um validador personalizado que opera na condição NotEmpty.
RuleFor(customer => customer.CustomerDiscount)
.GreaterThan(0)
.SetValidator(New MyCustomerDiscountValidator);
Se você precisar especificar a mesma condição para várias regras, poderá chamar o método When de nível superior em vez de encadear a chamada When no final da regra:
When(customer => customer.IsPreferred, () => {
RuleFor(customer => customer.CustomerDiscount).GreaterThan(0);
RuleFor(customer => customer.CreditCardNumber).NotNull();
});
Desta vez, a condição será aplicada a ambas as regras. Você também pode encadear uma chamada para Caso contrário, que invocará regras que não correspondem à condição:
When(customer => customer.IsPreferred, () => {
RuleFor(customer => customer.CustomerDiscount).GreaterThan(0);
RuleFor(customer => customer.CreditCardNumber).NotNull();
}).Otherwise(() => {
RuleFor(customer => customer.CustomerDiscount).Equal(0);
});