示例#1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="baseType"></param>
        /// <param name="directorySearched"></param>
        /// <param name="searchChildFolder"></param>
        /// <param name="config"></param>
        /// <returns></returns>
        public static IList <Type> LoadDerivedType(Type baseType, string directorySearched, bool searchChildFolder, TypeLoadConfig config)
        {
            if (config == null)
            {
                config = new TypeLoadConfig();
            }
            IList <Type> derivedTypeList = new List <Type>();

            if (searchChildFolder)
            {
                LoadDerivedTypeInAllFolder(baseType, derivedTypeList, directorySearched, config);
                return(derivedTypeList);
            }
            LoadDerivedTypeInOneFolder(baseType, derivedTypeList, directorySearched, config);
            return(derivedTypeList);
        }
示例#2
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="baseType"></param>
 /// <param name="derivedTypeList"></param>
 /// <param name="folderPath"></param>
 /// <param name="config"></param>
 private static void LoadDerivedTypeInOneFolder(Type baseType, IList <Type> derivedTypeList, string folderPath, TypeLoadConfig config)
 {
     string[] files = Directory.GetFiles(folderPath);
     foreach (string str in files)
     {
         if ((config.TargetFilePostfix == null) || str.EndsWith(config.TargetFilePostfix))
         {
             Assembly assembly = null;
             try
             {
                 if (config.CopyToMemory)
                 {
                     assembly = Assembly.Load(FileHelper.ReadFileReturnBytes(str));
                 }
                 else
                 {
                     assembly = Assembly.LoadFrom(str);
                 }
             }
             catch (Exception)
             {
             }
             if (assembly != null)
             {
                 Type[] types = assembly.GetTypes();
                 foreach (Type type in types)
                 {
                     if ((type.IsSubclassOf(baseType) || baseType.IsAssignableFrom(type)) && (config.LoadAbstractType || !type.IsAbstract))
                     {
                         derivedTypeList.Add(type);
                     }
                 }
             }
         }
     }
 }
示例#3
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="baseType"></param>
 /// <param name="derivedTypeList"></param>
 /// <param name="folderPath"></param>
 /// <param name="config"></param>
 private static void LoadDerivedTypeInAllFolder(Type baseType, IList <Type> derivedTypeList, string folderPath, TypeLoadConfig config)
 {
     LoadDerivedTypeInOneFolder(baseType, derivedTypeList, folderPath, config);
     string[] directories = Directory.GetDirectories(folderPath);
     if (directories != null)
     {
         foreach (string str in directories)
         {
             LoadDerivedTypeInAllFolder(baseType, derivedTypeList, str, config);
         }
     }
 }