using System;
using System.Reflection;
namespace Common.AssemblyUtil
{
///
/// 功能:程序集工厂
/// 作者:王昊昇
/// 时间:2012.2.8
///
public static class AssemblyFactory
{
///
/// 创建类实例
///
/// 类所在包的系统文件路径
/// 类的完整路径
/// 返回已经实例化的类实例
public static object CreateInstance(string packagePath, string className)
{
//加载程序集
Assembly ass = Assembly.Load(packagePath);
//获取类型
Type type = ass.GetType(className);
//创建类实例
return Activator.CreateInstance(type);
}
///
/// 创建类实例(动态链接库文件不需要与调用者在同一文件夹下)
///
/// 动态链接库文件路径
/// 类的完整路径
/// 返回已经实例化的类实例
public static object CreateInstanceAnywhere(string ddlPath, string className)
{
//加载程序集
Assembly ass = Assembly.LoadFile(ddlPath);
//获取类型
Type type = ass.GetType(className);
//创建类实例
return Activator.CreateInstance(type);
}
///
/// 获取动态链接库文件中所有模块
///
/// 动态链接库文件完整路径
/// 返回模块数组
public static Module[] GetModules(string filePath)
{
//获取程序集
Assembly ass = Assembly.LoadFile(filePath);
//获取所有模块信息
return ass.GetModules();
}
///
/// 调用函数
///
/// 函数所在类的实例
/// 函数名称
/// 调用的方法或构造函数的参数列表。这是一个对象数组,这些对象与要调用的方法或构造函数的参数具有相同的数量、顺序和类型。如果没有任何参数,则 parameters应为 null。如果此实例所表示的方法或构造函数采用 ref 参数(在 Visual Basic 中为 ByRef),使用此函数调用该方法或构造函数时,该参数不需要任何特殊特性。如果数组中的对象未用值来显式初始化,则该对象将包含该对象类型的默认值。对于引用类型的元素,该值为null。对于值类型的元素,该值为 0、0.0 或 false,具体取决于特定的元素类型。
///
public static object InvokeMethod(object instance, string functionName, object[] parameter)
{
//获取函数定义
MethodInfo mi = instance.GetType().GetMethod(functionName);
//执行函数
return mi.Invoke(instance, parameter);
}
///
/// 绑定枚举对象值
///
/// 枚举对象类型
/// 包含要转换的值或名称的字符串。
///
public static object BindEnumerator(Type t, string value)
{
return Enum.Parse(t, value, true);
}
///
/// 绑定枚举对象值
///
/// 枚举类型
/// 包含要转换的值或名称的字符串。
/// 枚举
public static T BindEnumerator(string value) where T : new()
{
return (T)Enum.Parse(typeof(T), value, true);
}
}
}