/// <summary> /// 在指定的文件夹中查找指定类型的对象并且实例化,只实例化匹配的第一个,实例类型必须有无参数构造函数 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="Directory"></param> /// <param name="Parameters"></param> /// <returns></returns> public static T FindInstanceFromDirectory <T>(string Directory, params object[] Parameters) { T result = default(T); ClassDrive cd = new ClassDrive(); DirectoryInfo dir = new DirectoryInfo(Directory); FileInfo[] ff = dir.GetFiles("*.dll"); foreach (FileInfo temp in ff) { Dictionary <string, Type> dic = cd.GetTypeListForInterface <T>(temp.FullName); foreach (string s in dic.Keys) { result = Lemon.GetInstance <T>(dic[s], Parameters); return(result); } } return(result); }
/// <summary> /// 在指定的文件夹中查找指定类型的对象并且实例化 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="IsPar">是否带参数构造</param> /// <param name="Directory"></param> /// <param name="ParFullClassName"></param> /// <param name="ParValue"></param> /// <returns></returns> public static List <T> FindInstanceFromDirectory <T>(string Directory, bool IsPar, List <string> ParFullClassName = null, List <object[]> ParValue = null) { List <T> result = new List <T>(); ClassDrive cd = new ClassDrive(); DirectoryInfo dir = new DirectoryInfo(Directory); FileInfo[] ff = dir.GetFiles("*.dll"); foreach (FileInfo temp in ff) { Dictionary <string, Type> dic = cd.GetTypeListForInterface <T>(temp.FullName); foreach (string s in dic.Keys) { object[] tmpPar = null; if (IsPar) { if (ParFullClassName != null && ParValue != null) { int index = ParFullClassName.IndexOf(s); if (index > -1) { tmpPar = ParValue[index]; } } } T tmpobj = default(T); if (tmpPar != null) { tmpobj = Lemon.GetInstance <T>(dic[s], tmpPar); } else { tmpobj = Lemon.GetInstance <T>(dic[s]); } if (tmpobj != null) { result.Add(tmpobj); } } } return(result); }
/// <summary> /// 搜索所有模块程序集 /// </summary> /// <returns></returns> public virtual void SearchAllModuleAssembly() { ClassDrive cd = new ClassDrive(); this.infoList = new List <ModuleInfo>(); DirectoryInfo rootDir = new DirectoryInfo(Lemon.GetModuleRootDirectory()); DirectoryInfo[] childDir = rootDir.GetDirectories(); foreach (DirectoryInfo dir in childDir) { FileInfo[] ff = dir.GetFiles("*.dll"); foreach (FileInfo temp in ff) { Dictionary <string, Type> dic = cd.GetTypeListForInterface <IModule>(temp.FullName); foreach (string s in dic.Keys) { this.CheckinInfo(temp.FullName, s); } } } }