鉴于此验证器:
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");
我错过了什么?
答案 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局部变量未使用。