public virtual Validator <T> NewValidator <T>(ValidatorOptions options) { var key = new ValidatorKey() { validatorType = typeof(T), validatorOptions = options }; Validator <T> retval; if (!ValidatorCacheContainer <T> .validators.TryGetValue(key, out retval)) { retval = DoNewValidator <T>(options); var newValidators = new Dictionary <ValidatorKey, Validator <T> >(); foreach (var keyValue in ValidatorCacheContainer <T> .validators) { newValidators[keyValue.Key] = keyValue.Value; } newValidators[key] = retval; ValidatorCacheContainer <T> .validators = newValidators; } return(retval); }
public virtual IValidator NewValidator(Type type, ValidatorOptions options) { Func <ValidatorOptions, IValidator> result; if (!validatorConstructorFunctions.TryGetValue(type, out result)) { var parameter = Expression.Parameter(typeof(ValidatorOptions), "options"); var methodInfo = typeof(ValidatorFactory).GetMethods(BindingFlags.Public | BindingFlags.Instance).FirstOrDefault(c => c.GetGenericArguments().Length == 1).MakeGenericMethod(type); var body = Expression.Call(Expression.Constant(this), methodInfo, parameter); result = Expression.Lambda <Func <ValidatorOptions, IValidator> >(body, parameter).Compile(); var newValidatorConstructors = new Dictionary <Type, Func <ValidatorOptions, IValidator> >(validatorConstructorFunctions); newValidatorConstructors[type] = result; validatorConstructorFunctions = newValidatorConstructors; } return(result(options)); }
public static IValidator NewValidator(Type type, ValidatorOptions options) { return(ValidatorFactory.Default.NewValidator(type, options)); }
protected abstract Validator <T> DoNewValidator <T>(ValidatorOptions options);
public ValidatorKey(Type validatorType, ValidatorOptions options) { this.validatorType = validatorType; this.validatorOptions = options; }