为什么在WebForms中无法识别ruleSet?

时间:2014-09-23 18:03:56

标签: fluentvalidation

鉴于此验证器:

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

根据文档,'ruleSet'选项应该使用我的命名规则集。但是,无法解析suleSet符号。

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

我错过了什么?

3 个答案:

答案 0 :(得分:4)

我也被这个问题困住了,但是当我查看代码时,我发现虽然IValidator<T>Validate方法,但Validate方法中也有DefaultValidatorExtensions个扩展方法1}}。 @ mmcglynn回答中ruleSet参数的调用实际上来自DefaultValidatorExtensions的此扩展方法:

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

这就是为什么Resharper认为ruleSet变量未被使用 - 因为它实际上没有被传入。字符串&#34; children&#34;传入的是第3个参数ruleset,而第二个参数(可以使用RulesetValidatorSelector个对象)默认为null

答案 1 :(得分:3)

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

答案 2 :(得分:-1)

我认为你需要它:

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

或者,更靠近FluentValidation文档中的示例

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

这样可行,但ReSharper认为ruleSet局部变量未使用。