예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        /// <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);
                    }
                }
            }
        }