| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- using System;
- using System.Collections.Generic;
- using System.Configuration;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- using System.Threading.Tasks;
- namespace CommonTool
- {
- /// <summary>
- /// 反射帮助类
- /// </summary>
- public class ReflectionHelper
- {
- public static ReflectionHelper Instance { get; } = new ReflectionHelper();
- public Type GetType(string className)
- {
- return GetType(AssemblyName, NameSpace,className);
- }
- public Type GetType(string assemblyName, string nameSpace, string className)
- {
- string fullName = nameSpace + "." + className;
- string path = fullName + "," + assemblyName;
- return Type.GetType(path);
- }
- /// <summary>
- /// 创建对象实例
- /// </summary>
- /// <param name="className">类型名</param>
- /// <returns></returns>
- public object CreateInstance(string className)
- {
- return CreateInstance(AssemblyName, NameSpace, className);
- }
- /// <summary>
- /// 创建对象实例
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="assemblyName">程序集</param>
- /// <param name="nameSpace">类型所在命名空间</param>
- /// <param name="className">类型名</param>
- /// <returns></returns>
- public object CreateInstance(string assemblyName, string nameSpace, string className)
-
- {
- string fullName = nameSpace + "." + className;
- string path = fullName + "," + assemblyName;//命名空间.类型名,程序集
- Type o = Type.GetType(path);//加载类型
- if (o != null)
- {
- object obj = Activator.CreateInstance(o, true);//根据类型创建实例
- return obj;//类型转换并返回
- }
- return null;
- }
- /// <summary>
- /// 创建对象实例
- /// </summary>
- /// <typeparam name="T">要创建对象的类型</typeparam>
- /// <param name="className">类型名</param>
- /// <returns></returns>
- public T CreateInstance<T>(string className)
- {
- return CreateInstance<T>(AssemblyName, NameSpace, className);
- }
- /// <summary>
- /// 创建对象实例
- /// </summary>
- /// <typeparam name="T">要创建对象的类型</typeparam>
- /// <param name="assemblyName">类型所在程序集名称</param>
- /// <param name="nameSpace">类型所在命名空间</param>
- /// <param name="className">类型名</param>
- /// <returns></returns>
- public T CreateInstance<T>(string assemblyName, string nameSpace, string className)
- {
- try
- {
- string fullName = nameSpace + "." + className;//命名空间.类型名
- //此为第一种写法
- object ect = Assembly.Load(assemblyName).CreateInstance(fullName);//加载程序集,创建程序集里面的 命名空间.类型名 实例
- return (T)ect;//类型转换并返回
- //下面是第二种写法
- //string path = fullName + "," + assemblyName;//命名空间.类型名,程序集
- //Type o = Type.GetType(path);//加载类型
- //object obj = Activator.CreateInstance(o, true);//根据类型创建实例
- //return (T)obj;//类型转换并返回
- }
- catch
- {
- //发生异常,返回类型的默认值
- return default(T);
- }
- }
- private string AssemblyName => ConfigurationManager.AppSettings["AssemblyName"];
- private string NameSpace => ConfigurationManager.AppSettings["NameSpace"];
- private string FullName => NameSpace + "." + AssemblyName;
-
- }
- }
|