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