public IRuleBuilderOptions <T, TProperty> SetValidator(IValidator <TProperty> validator, params string[] ruleSets) { validator.Guard("Cannot pass a null validator to SetValidator", nameof(validator)); var adaptor = new ChildValidatorAdaptor <T, TProperty>(validator, validator.GetType()) { RuleSets = ruleSets }; // ChildValidatorAdaptor supports both sync and async execution. Rule.AddAsyncValidator(adaptor, adaptor); return(this); }
public IRuleBuilderOptions <T, TProperty> SetValidator <TValidator>(Func <T, TValidator> validatorProvider, params string[] ruleSets) where TValidator : IValidator <TProperty> { validatorProvider.Guard("Cannot pass a null validatorProvider to SetValidator", nameof(validatorProvider)); var adaptor = new ChildValidatorAdaptor <T, TProperty>((context, _) => validatorProvider(context.InstanceToValidate), typeof(TValidator)) { RuleSets = ruleSets }; // ChildValidatorAdaptor supports both sync and async execution. Rule.AddAsyncValidator(adaptor, adaptor); return(this); }
public IRuleBuilderOptions <T, TProperty> SetAsyncValidator(IAsyncPropertyValidator <T, TProperty> validator) { if (validator == null) { throw new ArgumentNullException(nameof(validator)); } // See if the async validator supports synchronous execution too. IPropertyValidator <T, TProperty> fallback = validator as IPropertyValidator <T, TProperty>; Rule.AddAsyncValidator(validator, fallback); return(this); }