using NCC.Dependency; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; namespace NCC.Reflection.Extensions { /// /// Method Info 拓展 /// [SuppressSniffer] public static class MethodInfoExtensions { /// /// 获取真实方法的特性集合 /// /// /// /// public static IEnumerable GetActualCustomAttributes(this MethodInfo method, object target) { return GetActualMethodInfo(method, target)?.GetCustomAttributes(); } /// /// 获取真实方法的特性集合 /// /// /// /// /// public static object[] GetActualCustomAttributes(this MethodInfo method, object target, bool inherit) { return GetActualMethodInfo(method, target)?.GetCustomAttributes(inherit); } /// /// 获取真实方法的特性集合 /// /// /// /// /// public static IEnumerable GetActualCustomAttributes(this MethodInfo method, object target, Type attributeType) { return GetActualMethodInfo(method, target)?.GetCustomAttributes(attributeType); } /// /// 获取真实方法的特性集合 /// /// /// /// /// /// public static object[] GetActualCustomAttributes(this MethodInfo method, object target, Type attributeType, bool inherit) { return GetActualMethodInfo(method, target)?.GetCustomAttributes(attributeType, inherit); } /// /// 获取真实方法的特性集合 /// /// /// /// public static IEnumerable GetActualCustomAttributes(this MethodInfo method, object target) where TAttribute : Attribute { return GetActualMethodInfo(method, target)?.GetCustomAttributes(); } /// /// 获取真实方法的特性集合 /// /// /// /// /// public static IEnumerable GetActualCustomAttributes(this MethodInfo method, object target, bool inherit) where TAttribute : Attribute { return GetActualMethodInfo(method, target)?.GetCustomAttributes(inherit); } /// /// 获取真实方法的特性 /// /// /// /// /// public static Attribute GetActualCustomAttribute(this MethodInfo method, object target, Type attributeType) { return GetActualMethodInfo(method, target)?.GetCustomAttribute(attributeType); } /// /// 获取真实方法的特性 /// /// /// /// /// /// public static Attribute GetActualCustomAttribute(this MethodInfo method, object target, Type attributeType, bool inherit) { return GetActualMethodInfo(method, target)?.GetCustomAttribute(attributeType, inherit); } /// /// 获取真实方法的特性 /// /// /// /// public static TAttribute GetActualCustomAttribute(this MethodInfo method, object target) where TAttribute : Attribute { return GetActualMethodInfo(method, target)?.GetCustomAttribute(); } /// /// 获取真实方法的特性 /// /// /// /// /// public static TAttribute GetActualCustomAttribute(this MethodInfo method, object target, bool inherit) where TAttribute : Attribute { return GetActualMethodInfo(method, target)?.GetCustomAttribute(inherit); } /// /// 获取实际方法对象 /// /// /// /// private static MethodInfo GetActualMethodInfo(MethodInfo method, object target) { if (target == null) return default; var targetType = target.GetType(); var actualMethod = targetType.GetMethods() .FirstOrDefault(u => u.ToString().Equals(method.ToString())); if (actualMethod == null) return default; return actualMethod; } } }