RuleSets允许您将验证规则分组在一起,这些规则可以作为一个组一起执行,而忽略其他规则: 例如,假设我们在一个Person对象上具有3个属性(Id,Surname和Forename),并且每个属性都有一个验证规则。 我们可以将Surname和Forename规则分组到“名称”规则集中:
public class PersonValidator : AbstractValidator<Person>
{
public PersonValidator()
{
RuleSet("Names", () =>
{
RuleFor(x => x.Surname).NotNull();
RuleFor(x => x.Forename).NotNull();
});
RuleFor(x => x.Id).NotEqual(0);
}
}
这里,我们把关于Surname和Forename的两个规则一起放在Names组当中。 我们可以通过options.IncludeRuleSets 来调用 Names的规则集:
var validator = new PersonValidator();
var person = new Person();
var result = validator.Validate(person, options => options.IncludeRuleSets("Names"));
这使我们可以将复杂的验证器定义分解为较小的片段,这些片段可以单独执行。如果规则集的名字没有被传参的话,则只有不在任何规则集合里的规则会被执行。 我们可一起将多个规则集名称传递给:IncludeRuleSets来执行多个规则集。
var result = validator.Validate(person, options =>
{
options.IncludeRuleSets("Names", "MyRuleSet", "SomeOtherRuleSet");
});
当我们想调用全部验证规则的时候,FluentValidation有一特殊的规则集 default (不区分大小写) 它包含了所有淌有定义在规则集合时面的规则。
validator.Validate(person, options =>
{
// 方式 1: IncludeRulesNotInRuleSet 等价于 "default"
options.IncludeRuleSets("Names").IncludeRulesNotInRuleSet();
// 方式
2: This does the same thing.
option.IncludeRuleSets("Names", "default");
});
! 注意:我们不能创建名为default的验证集了
我们也可以强制执行所有的规则 不管它是在还是不在 ReleSet当中
validator.Validate(person, options =>
{
options.IncludeAllRuleSets();
});