2014-09-23 27 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

相關問題