关于FluentValidation中IRuleBuilder.SetValidator()带参数重载的用途、用法及相关文档示例的咨询
关于FluentValidation中IRuleBuilder.SetValidator()带参数重载的用途、用法及相关文档示例的咨询
嘿,我来给你拆解一下这个重载的作用和用法吧!
首先,这个SetValidator重载里的ruleSets参数,核心作用是指定在调用子验证器时,只执行该验证器中属于特定规则组(RuleSet)的验证规则。
用途说明
在FluentValidation里,RuleSet是用来给验证规则分组的功能,能让你根据不同业务场景只触发部分规则。比如你有一个UserValidator,里面既有创建用户时需要的规则,也有更新用户时的规则,分别放在不同RuleSet里。当你在父验证器里调用这个子验证器时,就可以通过这个参数精准指定只运行某一组或某几组规则,不用执行所有验证逻辑。
用法示例
给你举个实际的代码例子:
先定义一个包含多组RuleSet的子验证器:
public class UserValidator : AbstractValidator<User> { public UserValidator() { // 创建用户的规则组 RuleSet("Create", () => { RuleFor(x => x.Username).NotEmpty().Length(3, 20); RuleFor(x => x.Password).NotEmpty().MinimumLength(8); }); // 更新用户的规则组 RuleSet("Update", () => { RuleFor(x => x.Id).NotEmpty(); RuleFor(x => x.Username).Length(3, 20); }); } }
然后在父验证器中,用带ruleSets参数的SetValidator指定只执行"Update"规则组:
public class UserProfileValidator : AbstractValidator<UserProfile> { public UserProfileValidator() { RuleFor(x => x.User) .SetValidator(new UserValidator(), "Update"); // 仅触发UserValidator里的Update规则组 } }
如果需要同时指定多个RuleSet,直接传入多个字符串参数就行:
.SetValidator(new UserValidator(), "Create", "Update");
补充说明
虽然官方文档没有单独针对这个重载做专门讲解,但这个参数的逻辑和FluentValidation的RuleSet功能是一脉相承的——它就是把规则组的筛选条件传递给子验证器,让子验证器只运行你指定的那部分规则。
内容来源于stack exchange
相关产品推荐
相关产品推荐

