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); }