我使用FluentValidation(C#),以实现一个复杂的对象的验证。我的问题是,我想为给定对象的特定属性的完整对象选择不同的验证器。FluentValidation - 有条件选择一个验证
假设以下结构:
public class MyComplexClass
{
public string OneProperty;
public string OtherProperty;
public bool SelectionCriteria
}
在这个对象,我想用Validator1如果SelectionCriteria是真实的,如果Validator2 SelectionCriteria是假的。 显然,验证可以嵌套的具体性能,但在这里我想选择的完整一流的验证。在我的脑海里有这样的东西:
public MyComplexClassValidator : AbstractValidator_MyComplexClass_
{
public MyComplexClassValidator()
{
AddRule(new ConditionValidationAssignmentRule(new MyComplexClassValidator1,x=>x.SelectionCriteria))
AddRule(new ConditionValidationAssignmentRule(new MyComplexClassValidator1,x=>!x.SelectionCriteria))
}
}
class ConditionalValidatorAssignmentRule : IValidationRule
{
public string RuleSet
{
get; set;
}
public IEnumerable<IPropertyValidator> Validators
{
get
{
yield break;
}
}
private IValidator _AssignedValidator;
private bool _ExecuteValidation = false;
private Func<string, bool> _Condition;
public ConditionalValidatorAssignmentRule(IValidator validator, Func<string,bool> condition)
{
_AssignedValidator = validator;
_Condition = condition;
}
public void ApplyCondition(Func<object, bool> predicate, ApplyConditionTo applyConditionTo = ApplyConditionTo.AllValidators)
{
throw new NotImplementedException();
}
public IEnumerable<ValidationFailure> Validate(ValidationContext context)
{
var ret = new List<FluentValidation.Results.ValidationFailure>();
ret.AddRange(_AssignedValidator.Validate(context).Errors);
return ret;
}
}
不幸的是我没有设法用SelectionCriteria调用该函数。 您能否建议如何以正确的方式完成这项工作?同样,我可以做这一切与财产验证和当-S,但我想分配基于一个单独的属性来照顾其余的独立验证。提前感谢!