FluentValidation 规则集合 RuleSets

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();
});
最近更新的
...