You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

88 lines
3.1 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace Leit.FrameWork.Reflection
{
public partial class Reflect
{
/// <summary>
/// 获取无泛型类无参构造函数实例
/// </summary>
/// <typeparam name="T">返回实例类型</typeparam>
/// <param name="fullName">Dll完整路径</param>
/// <param name="className">要实例化的类名称</param>
/// <returns></returns>
public static T GetInstance<T>(string fullName, string className)
{
Assembly assembly = Assembly.LoadFile(fullName);
Type type = assembly.GetType(className);
return (T)Activator.CreateInstance(type);
}
/// <summary>
/// 获取无泛型类有参构造函数实例
/// </summary>
/// <typeparam name="T">返回实例类型</typeparam>
/// <param name="fullName">Dll完整路径</param>
/// <param name="className">要实例化的类名称</param>
/// <param name="paramArray">构造函数参数数组</param>
/// <returns></returns>
public static T GetInstance<T>(string fullName, string className, params object[] paramArray)
{
Assembly assembly = Assembly.LoadFile(fullName);
Type type = assembly.GetType(className);
return (T)Activator.CreateInstance(type, paramArray);
}
/// <summary>
/// 获取泛型类无参构造函数实例
/// </summary>
/// <typeparam name="T">返回实例类型</typeparam>
/// <param name="fullName">Dll完整路径</param>
/// <param name="className">要实例化的类名称</param>
/// <param name="GenericTypeArray">泛型参数数组</param>
/// <returns></returns>
public static T GetInstance<T>(string fullName, string className, Type[] genericTypeArray)
{
Assembly assembly = Assembly.LoadFile(fullName);
Type type = assembly.GetType(className + "`" + genericTypeArray.Length);
Type genericType = type.MakeGenericType(genericTypeArray);
return (T)Activator.CreateInstance(genericType);
}
/// <summary>
/// 获取泛型类有参构造函数实例
/// </summary>
/// <typeparam name="T">返回实例类型</typeparam>
/// <param name="fullName">Dll完整路径</param>
/// <param name="className">要实例化的类名称</param>
/// <param name="GenericTypeArray">泛型参数数组</param>
/// <param name="paramArray">构造函数参数数组</param>
/// <returns></returns>
public static T GetInstance<T>(string fullName, string className, Type[] genericTypeArray, object[] paramArray)
{
Assembly assembly = Assembly.LoadFile(fullName);
Type type = assembly.GetType(className + "`" + genericTypeArray.Length);
Type genericType = type.MakeGenericType(genericTypeArray);
return (T)Activator.CreateInstance(genericType, paramArray);
}
}
}