ReflectorExtensions.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using AspectCore.Extensions.Reflection;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Reflection;
  6. using System.Reflection.Metadata;
  7. namespace TEAMModelOS.SDK.Helper.Common.ReflectorExtensions
  8. {
  9. public static class ReflectorExtensions
  10. {
  11. public static T GetPropertyValue<T>(this object obj, string name, BindingFlags bindingFlags) where T : class
  12. {
  13. var chProperty = obj.GetType().GetTypeInfo().GetProperty(name, bindingFlags);
  14. var chReflector = chProperty.GetReflector();
  15. var value = chReflector.GetValue(obj) as T;
  16. return value;
  17. }
  18. public static Tuple<T, FieldInfo> GetFieldValue<T>(this object obj, string name, BindingFlags bindingFlags) where T : class
  19. {
  20. var chField = obj.GetType().GetTypeInfo().GetField(name, bindingFlags);
  21. var chReflector = chField.GetReflector();
  22. var value = chReflector.GetValue(obj) as T;
  23. return Tuple.Create(value, chField);
  24. }
  25. public static T GetFieldValue<T>(this Type type, string name, BindingFlags bindingFlags) where T : class
  26. {
  27. var chField = type.GetTypeInfo().GetField(name, bindingFlags);
  28. var chReflector = chField.GetReflector();
  29. var value = chReflector.GetValue(null) as T;
  30. return value;
  31. }
  32. /// <summary>
  33. /// 获取T类型属性标记的类集合
  34. /// </summary>
  35. /// <typeparam name="T"></typeparam>
  36. /// <returns></returns>
  37. public static IEnumerable<Type> GetAllTypeAsAttribute<T>() {
  38. Assembly assembly =typeof(T).Assembly;
  39. var typesWithMyAttribute =
  40. from t in assembly.GetTypes()
  41. let attributes = t.GetCustomAttributes(typeof(T), true)
  42. where attributes != null && attributes.Length > 0
  43. select new { Type = t, Attributes = attributes.Cast<T>() };
  44. return typesWithMyAttribute;
  45. }
  46. }
  47. }