2014-09-23 49 views
1

鉴于这种验证:为什么ruleset在WebForms中无法识别?

public ThingValidator() 
{ 
    RuleSet("Subgroup",() => 
    { 
     RuleFor(x => x.Apple).NotEmpty(); 
     RuleFor(x => x.Peach).NotEmpty(); 
    }); 
} 

根据该文件,在“规则集”选项应该用我的命名规则集。但是,suleSet符号无法解析。

var validator = new ThingValidator(); 
var thing = new Constituent(); 
var results = validator.Validate(thing, ruleSet: "Subgroup"); 

我在想什么?

回答

4

我被困在这个为好,但是当我看着代码,我发现,虽然IValidator<T>Validate方法,也有在DefaultValidatorExtensionsValidate扩展方法。在@ mmcglynn的答案ruleSet参数调用实际上是从DefaultValidatorExtensions此扩展方法:

public static ValidationResult Validate<T>(
    this IValidator<T> validator, T instance, 
    IValidatorSelector selector = null, 
    string ruleSet = null) 

这就是为什么ReSharper的认为,ruleSet变量是未使用的 - 因为它实际上不是在传递的字符串“的孩子。 “传入的是第三个参数ruleset,而第二个参数(可以采用RulesetValidatorSelector对象)默认为null

-1

我想你需要它:

var results = validator.Validate(constituent, new RulesetValidatorSelector("Subgroup")); 

,或者接近例如FluentValidation文档

RulesetValidatorSelector ruleSet = new RulesetValidatorSelector(); 
var results = validator.Validate(constituent, ruleSet: "Children"); 

这将工作中,但ReSharper的认为,规则集局部变量使用。

+0

实例化RulesetValidatorSelector不会扩展验证程序以包含具有参数“ruleSet”的方法。问题是扩展方法没有被应用。参考以下.. https://github.com/JeremySkinner/FluentValidation/blob/master/src/FluentValidation/DefaultValidatorExtensions.cs#L835 – jKlaus 2017-01-04 15:31:56

2

这是扩展方法,声明命名空间using FluentValidation,你可以使用它。

+0

Tnx,这解决了我的问题 – 2018-02-21 08:38:59

+0

很高兴帮助你:) – tiennguyen 2018-02-22 03:01:22

相关问题