Fluent 検証は条件付き検証をサポートしています。When 句を使用して、セカンダリ フィールドの値を確認するだけです。
https://docs.fluentvalidation.net/en/latest/conditions.html
When/Unless を使用した条件の指定When および Unless メソッドを使用して、ルールをいつ実行するかを制御する条件を指定できます。たとえば、CustomerDiscount プロパティの次のルールは、IsPreferredCustomer が true の場合にのみ実行されます。
RuleFor(customer => customer.CustomerDiscount)
.GreaterThan(0)
.When(customer => customer.IsPreferredCustomer);
Unless メソッドは、単に When の反対です。
.SetValidator オペレーションを使用して、NotEmpty 条件で動作するカスタム バリデータを定義することもできます。
RuleFor(customer => customer.CustomerDiscount)
.GreaterThan(0)
.SetValidator(New MyCustomerDiscountValidator);
複数のルールに同じ条件を指定する必要がある場合は、ルールの最後で When 呼び出しをチェーンする代わりに、最上位の When メソッドを呼び出すことができます。
When(customer => customer.IsPreferred, () => {
RuleFor(customer => customer.CustomerDiscount).GreaterThan(0);
RuleFor(customer => customer.CreditCardNumber).NotNull();
});
今回は、両方のルールに条件が適用されます。条件に一致しないルールを呼び出すそれ以外の呼び出しをチェーンすることもできます。
When(customer => customer.IsPreferred, () => {
RuleFor(customer => customer.CustomerDiscount).GreaterThan(0);
RuleFor(customer => customer.CreditCardNumber).NotNull();
}).Otherwise(() => {
RuleFor(customer => customer.CustomerDiscount).Equal(0);
});