ReflectionHelper.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Configuration;
  4. using System.Linq;
  5. using System.Reflection;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace CommonTool
  9. {
  10. /// <summary>
  11. /// 反射帮助类
  12. /// </summary>
  13. public class ReflectionHelper
  14. {
  15. public static ReflectionHelper Instance { get; } = new ReflectionHelper();
  16. public Type GetType(string className)
  17. {
  18. return GetType(AssemblyName, NameSpace,className);
  19. }
  20. public Type GetType(string assemblyName, string nameSpace, string className)
  21. {
  22. string fullName = nameSpace + "." + className;
  23. string path = fullName + "," + assemblyName;
  24. return Type.GetType(path);
  25. }
  26. /// <summary>
  27. /// 创建对象实例
  28. /// </summary>
  29. /// <param name="className">类型名</param>
  30. /// <returns></returns>
  31. public object CreateInstance(string className)
  32. {
  33. return CreateInstance(AssemblyName, NameSpace, className);
  34. }
  35. /// <summary>
  36. /// 创建对象实例
  37. /// </summary>
  38. /// <typeparam name="T"></typeparam>
  39. /// <param name="assemblyName">程序集</param>
  40. /// <param name="nameSpace">类型所在命名空间</param>
  41. /// <param name="className">类型名</param>
  42. /// <returns></returns>
  43. public object CreateInstance(string assemblyName, string nameSpace, string className)
  44. {
  45. string fullName = nameSpace + "." + className;
  46. string path = fullName + "," + assemblyName;//命名空间.类型名,程序集
  47. Type o = Type.GetType(path);//加载类型
  48. if (o != null)
  49. {
  50. object obj = Activator.CreateInstance(o, true);//根据类型创建实例
  51. return obj;//类型转换并返回
  52. }
  53. return null;
  54. }
  55. /// <summary>
  56. /// 创建对象实例
  57. /// </summary>
  58. /// <typeparam name="T">要创建对象的类型</typeparam>
  59. /// <param name="className">类型名</param>
  60. /// <returns></returns>
  61. public T CreateInstance<T>(string className)
  62. {
  63. return CreateInstance<T>(AssemblyName, NameSpace, className);
  64. }
  65. /// <summary>
  66. /// 创建对象实例
  67. /// </summary>
  68. /// <typeparam name="T">要创建对象的类型</typeparam>
  69. /// <param name="assemblyName">类型所在程序集名称</param>
  70. /// <param name="nameSpace">类型所在命名空间</param>
  71. /// <param name="className">类型名</param>
  72. /// <returns></returns>
  73. public T CreateInstance<T>(string assemblyName, string nameSpace, string className)
  74. {
  75. try
  76. {
  77. string fullName = nameSpace + "." + className;//命名空间.类型名
  78. //此为第一种写法
  79. object ect = Assembly.Load(assemblyName).CreateInstance(fullName);//加载程序集,创建程序集里面的 命名空间.类型名 实例
  80. return (T)ect;//类型转换并返回
  81. //下面是第二种写法
  82. //string path = fullName + "," + assemblyName;//命名空间.类型名,程序集
  83. //Type o = Type.GetType(path);//加载类型
  84. //object obj = Activator.CreateInstance(o, true);//根据类型创建实例
  85. //return (T)obj;//类型转换并返回
  86. }
  87. catch
  88. {
  89. //发生异常,返回类型的默认值
  90. return default(T);
  91. }
  92. }
  93. private string AssemblyName => ConfigurationManager.AppSettings["AssemblyName"];
  94. private string NameSpace => ConfigurationManager.AppSettings["NameSpace"];
  95. private string FullName => NameSpace + "." + AssemblyName;
  96. }
  97. }