我有一个带有规则集的验证器
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");
您的BrokerActiveRule
和ProductCodeValidRule
验证器是什么样的?在CreateApplication
规则集中是否在其中定义了规则?
如果它们不在规则集中或不在CreateApplication
之外的规则集中,则将不会调用它们。
子验证程序的行为我仍然觉得有些奇怪,但是基本上,如果您调用带有规则集的父验证程序,并且希望调用子验证程序,则包含项(在这种情况下为SetValidator
)必须位于规则集,和您要应用的子验证程序规则也必须在该规则集内。
请参阅this了解更多信息。
可以通过创建自己的IValidatorSelector
来自定义此行为。这是我正在考虑做的事情(但还没有解决),因为我遇到了一个情况:子验证器具有默认值,并且规则设置了特定规则,这意味着我必须在父验证器中两次包含子验证器。 >