public static MethodInfoEx GetMethodEx(this MethodInfo methodInfo, bool enableCaching = true)
 {
     if (enableCaching)
     {
         return(MethodInfoExCache.GetMethodEx(methodInfo));
     }
     else
     {
         return(new MethodInfoEx(methodInfo, false));
     }
 }
 public static IEnumerable <MethodInfoEx> GetMethodsEx(this Type type, BindingFlags bindingFlags = PUBLIC_ISTANCE_STATIC, bool enableCaching = true)
 {
     if (enableCaching)
     {
         return(MethodInfoExCache.GetMethodsEx(type, bindingFlags));
     }
     else
     {
         return(type.GetMethods(bindingFlags)
                .Where(x => !x.ContainsGenericParameters)
                .Select(x => GetMethodEx(x, false)));
     }
 }
 public static IReadOnlyDictionary <string, MethodInfoEx> GetMethodsExDic(this Type type, BindingFlags bindingFlags = PUBLIC_ISTANCE_STATIC, bool enableCaching = true)
 {
     if (enableCaching)
     {
         return(MethodInfoExCache.GetMethodsExDic(type, bindingFlags));
     }
     else
     {
         return(new ReadOnlyDictionary <string, MethodInfoEx>(
                    type.GetMethods(bindingFlags)
                    .Where(x => !x.ContainsGenericParameters)
                    .ToDictionary(x => x.Name, x => new MethodInfoEx(x, false))));
     }
 }
 public static MethodInfoEx GetMethodEx(this Type type, string name, IEnumerable <Type> signature, BindingFlags bindingFlags = PUBLIC_ISTANCE_STATIC, bool enableCaching = true)
 {
     if (enableCaching)
     {
         return(MethodInfoExCache.GetMethodEx(type, name, signature, bindingFlags));
     }
     else
     {
         var f = (signature == null) ? type.GetMethod(name, bindingFlags) : type.GetMethod(name, bindingFlags, null, signature.ToArray(), null);
         if (f == null)
         {
             return(null);
         }
         return(new MethodInfoEx(f, false));
     }
 }