Esempio n. 1
0
        private static object InvokeRuleOptionMethod(Type type, string methodName, object ruleBuilder, RuleAttribute rule, PropertyInfo property, params object[] additionalParameters)
        {
            var method = ReflectionUtility.GetGenericExtensionMethod(
                typeof(DefaultValidatorOptions),
                typeof(IRuleBuilderOptions <,>),
                methodName,
                new Dictionary <string, Type> {
                { "T", type }, { "TProperty", property.PropertyType }
            },
                new Type[] { typeof(string) });

            var methodToInvoke = method;

            if (method.ContainsGenericParameters)
            {
                var genericArgumentTypes = new Type[method.GetGenericArguments().Length];

                genericArgumentTypes[0] = type;

                if (genericArgumentTypes.Length == 2)
                {
                    genericArgumentTypes[1] = property.PropertyType;
                }

                methodToInvoke = method.MakeGenericMethod(genericArgumentTypes);
            }

            var ruleBuilderOptions = ReflectionUtility.InvokeExtensionMethod(
                ruleBuilder,
                methodToInvoke,
                additionalParameters);

            return(ruleBuilderOptions);
        }