我使用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,但我想分配基於一個單獨的屬性來照顧其餘的獨立驗證。提前感謝!