RuleSet中的FluentValidation验证程序未执行

问题描述 投票:0回答:1

我有一个带有规则集的验证器

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");
c# .net validation fluentvalidation
1个回答
0
投票

您的BrokerActiveRuleProductCodeValidRule验证器是什么样的?在CreateApplication规则集中是否在其中定义了规则?

如果它们不在规则集中或不在CreateApplication之外的规则集中,则将不会调用它们。

子验证程序的行为我仍然觉得有些奇怪,但是基本上,如果您调用带有规则集的父验证程序,并且希望调用子验证程序,则包含项(在这种情况下为SetValidator)必须位于规则集,您要应用的子验证程序规则也必须在该规则集内。

请参阅this了解更多信息。

可以通过创建自己的IValidatorSelector来自定义此行为。这是我正在考虑做的事情(但还没有解决),因为我遇到了一个情况:子验证器具有默认值,并且规则设置了特定规则,这意味着我必须在父验证器中两次包含子验证器。 >

© www.soinside.com 2019 - 2024. All rights reserved.