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); } } }