public static void ExamineAssembly(Assembly objDLL, string strInterface, List <AvailablePlugin> Plugins)
        {
            //Type objType;
            Type            objInterface;
            AvailablePlugin Plugin;

            Type[] otps = objDLL.GetTypes();

            //Цикл по всем типам в DLL
            foreach (Type objType in otps)
            {
                //Смотрим только типы public
                if (objType.IsPublic == true)
                {
                    //игнорируем абстрактные классы
                    if ((objType.Attributes & TypeAttributes.Abstract) != TypeAttributes.Abstract)
                    {
                        //Смотрим, реализует ли этот тип наш интерфейс
                        objInterface = objType.GetInterface(strInterface, true);
                        if (objInterface != null)
                        {
                            Plugin = new AvailablePlugin();
                            Plugin.AssemblyPath = objDLL.Location;
                            Plugin.ClassName    = objType.FullName;
                            Plugins.Add(Plugin);
                        }
                    }
                }
            }
        }
        public static void ExamineAssembly(Assembly objDLL, string strInterface, List<AvailablePlugin> Plugins)
        {
            //Type objType;
            Type objInterface;
            AvailablePlugin Plugin;
            Type[] otps = objDLL.GetTypes();

            //Цикл по всем типам в DLL
            foreach (Type objType in otps)
            {
                //Смотрим только типы public
                if (objType.IsPublic == true)
                {
                    //игнорируем абстрактные классы
                    if ((objType.Attributes & TypeAttributes.Abstract) != TypeAttributes.Abstract)
                    {
                        //Смотрим, реализует ли этот тип наш интерфейс
                        objInterface = objType.GetInterface(strInterface, true);
                        if (objInterface != null)
                        {
                            Plugin = new AvailablePlugin();
                            Plugin.AssemblyPath = objDLL.Location;
                            Plugin.ClassName = objType.FullName;
                            Plugins.Add(Plugin);
                        }
                    }
                }
            }
        }
 public object CreatePluginInstance(AvailablePlugin Plugin)
 {
     Assembly objDLL;
     object objPlugin;
     try
     {
         //Загружаем dll
         objDLL = Assembly.LoadFrom(Plugin.AssemblyPath);
         //создаём и возвращаем экземпляр класса
         objPlugin = objDLL.CreateInstance(Plugin.ClassName);
     }
     catch (Exception)
     {
         return null;
     }
     return objPlugin;
 }
        public object CreatePluginInstance(AvailablePlugin Plugin)
        {
            Assembly objDLL;
            object   objPlugin;

            try
            {
                //Загружаем dll
                objDLL = Assembly.LoadFrom(Plugin.AssemblyPath);
                //создаём и возвращаем экземпляр класса
                objPlugin = objDLL.CreateInstance(Plugin.ClassName);
            }
            catch (Exception)
            {
                return(null);
            }
            return(objPlugin);
        }