Валидаторы FluentValidation внутри RuleSet не выполняются - PullRequest
0 голосов
/ 20 января 2020

У меня есть валидатор с набором правил

public class ApplicationValidator : AbstractValidator<Application>
{
    public ApplicationValidator()
    {
        RuleSet("CreateApplication", () =>
        {
            RuleFor(a => a.SalesChannelBroker)
                .SetValidator(new BrokerActiveRule());

            RuleFor(ld => ld.LoanDetailSegment)
                .SetValidator(new ProductCodeValidRule());
        });
    }
}

Однако, когда я выполняю валидацию, правила не проверяются следующим образом, почему?

// Validate
var validationResult = new ApplicationValidator().Validate(app, ruleSet: "CreateApplication");

1 Ответ

0 голосов
/ 27 января 2020

Как выглядят ваши валидаторы BrokerActiveRule и ProductCodeValidRule? Определены ли в них правила в наборе правил CreateApplication?

Если они не входят в набор правил или в набор правил, отличный от CreateApplication, они не будут вызваны.

Поведение дочернего валидатора Я все еще нахожу немного странным, но в основном, если вы вызываете родительский валидатор с набором правил и хотите, чтобы ваши дочерние валидаторы вызывались, включение (SetValidator в этом случае) должно находиться в наборе правил, и дочерние валидаторы, которые вы хотите применить, также должны находиться в этом наборе правил.

См. этот для получения дополнительной информации.

Это поведение можно настроить, создав собственный IValidatorSelector. Это было то, что я искал (но пока не нашел), так как у меня есть случай, когда дочерний валидатор имеет правила по умолчанию и набор правил, определяющий c правил, что означает, что мне пришлось дважды включать дочерний валидатор в родительский валидатор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...