using System; using System.Collections; using System.Reflection; using IwbZero.ToolCommon.StringModel; namespace IwbZero.ToolCommon.AssemblyHelpers { public static class AssemblyHelper { public static Type GetType(string typeName) { Type type = null; Assembly loadedAssembly = GetLoadedAssembly(typeName); if (loadedAssembly != null) type = loadedAssembly.GetType(typeName, false, true); return type; } public static Assembly GetLoadedAssembly(string typeName) { Assembly assembly1 = null; foreach (Assembly assembly2 in AppDomain.CurrentDomain.GetAssemblies()) { if (assembly2.GetType(typeName) != null) { assembly1 = assembly2; break; } } return assembly1; } /// /// 创建实例 /// /// 类名 /// 程序集名 /// public static object CreateInstance(string typeName, string lib) { object obj = null; if (typeName != "") { try { lib = lib.UAndT().Ew(".DLL"); Assembly assembly = GetLoadedAssembly(typeName) ?? LoadAssembly(lib); if (assembly != null) obj = assembly.CreateInstance(typeName); } catch (Exception ex) { if (ex.InnerException != null) throw ex.InnerException; } } return obj; } /// /// 创建实例 /// /// "程序集名"@"类名" /// public static object CreateInstance(string typeName) { object obj = null; Array arrayEx = typeName.StrToArray("@"); if (arrayEx.Length >= 2) { string lib = arrayEx.GetValue(0) + ".DLL"; obj = CreateInstance(arrayEx.GetValue(1)+"", lib); } return obj; } public static bool IsInterfaceOf(object obj, string @interface) { return obj.GetType().GetInterface(@interface, true) != null; } public static Assembly LoadAssembly(string lib) { Assembly assembly = null; string fullPathFileName = GetFullPathFileName(lib); if (fullPathFileName != "") { try { assembly = Assembly.LoadFrom(fullPathFileName); } catch (Exception ex) { string message = ex.Message; Console.WriteLine(message); } } return assembly; } public static ArrayList GetSubClassesOf(Type poBaseType, string libs) { ArrayList arrayList = new ArrayList(); foreach (string lib in libs.StrToArray()) { Assembly assembly = LoadAssembly(lib); if (assembly != null) { foreach (Type type in assembly.GetTypes()) { bool flag = true; if (poBaseType != null) { if (poBaseType.IsInterface) { if (type.GetInterface(poBaseType.ToString(), true) == null) flag = false; } else if (!type.IsSubclassOf(poBaseType)) flag = false; } if (flag) arrayList.Add(type.FullName); } } } return arrayList; } private static string GetFullPathFileName(string libs) { string str = $"{AppDomain.CurrentDomain.BaseDirectory}\\{libs}"; return str; } } }