Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
 public static IValidator NewValidator(Type type, ValidatorOptions options)
 {
     return(ValidatorFactory.Default.NewValidator(type, options));
 }
Ejemplo n.º 4
0
 protected abstract Validator <T> DoNewValidator <T>(ValidatorOptions options);
Ejemplo n.º 5
0
 public ValidatorKey(Type validatorType, ValidatorOptions options)
 {
     this.validatorType    = validatorType;
     this.validatorOptions = options;
 }