using AspectCore.Extensions.Reflection; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Reflection.Metadata; namespace TEAMModelOS.SDK.Helper.Common.ReflectorExtensions { public static class ReflectorExtensions { public static T GetPropertyValue(this object obj, string name, BindingFlags bindingFlags) where T : class { var chProperty = obj.GetType().GetTypeInfo().GetProperty(name, bindingFlags); var chReflector = chProperty.GetReflector(); var value = chReflector.GetValue(obj) as T; return value; } public static Tuple GetFieldValue(this object obj, string name, BindingFlags bindingFlags) where T : class { var chField = obj.GetType().GetTypeInfo().GetField(name, bindingFlags); var chReflector = chField.GetReflector(); var value = chReflector.GetValue(obj) as T; return Tuple.Create(value, chField); } public static T GetFieldValue(this Type type, string name, BindingFlags bindingFlags) where T : class { var chField = type.GetTypeInfo().GetField(name, bindingFlags); var chReflector = chField.GetReflector(); var value = chReflector.GetValue(null) as T; return value; } /// /// 获取T类型属性标记的类集合 /// /// /// public static IEnumerable GetAllTypeAsAttribute() { Assembly assembly =typeof(T).Assembly; var typesWithMyAttribute = from t in assembly.GetTypes() let attributes = t.GetCustomAttributes(typeof(T), true) where attributes != null && attributes.Length > 0 select new { Type = t, Attributes = attributes.Cast() }; return typesWithMyAttribute; } } }