Esempio n. 1
0
        /// <summary>
        /// Загрузить спецификации плагинов
        /// </summary>
        private void LoadPlugins()
        {
            PluginSpecs = new List <PluginSpec>();
            HashSet <string> procFileNames = new HashSet <string>();

            foreach (string fileName in WebSettings.PluginFileNames)
            {
                if (!procFileNames.Contains(fileName))
                {
                    string     errMsg;
                    PluginSpec pluginSpec = PluginSpec.CreateFromDll(AppDirs.BinDir + fileName, out errMsg);

                    if (pluginSpec == null)
                    {
                        Log.WriteError(errMsg);
                    }
                    else
                    {
                        PluginSpecs.Add(pluginSpec);
                    }

                    procFileNames.Add(fileName);
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Загрузить компоненты из файлов
        /// </summary>
        public void LoadCompFromFiles()
        {
            try
            {
                lock (syncLock)
                {
                    log.WriteAction(Localization.UseRussian ?
                                    "Загрузка компонентов из файлов" :
                                    "Load components from files");

                    ClearDicts();
                    AttrTranslator attrTranslator = new AttrTranslator();
                    DirectoryInfo  dirInfo        = new DirectoryInfo(appDirs.BinDir);
                    FileInfo[]     fileInfoArr    = dirInfo.GetFiles(CompLibMask, SearchOption.TopDirectoryOnly);

                    foreach (FileInfo fileInfo in fileInfoArr)
                    {
                        string     fileName   = fileInfo.FullName;
                        PluginSpec pluginSpec = PluginSpec.CreateFromDll(fileName, out string errMsg);

                        if (pluginSpec == null)
                        {
                            log.WriteError(errMsg);
                        }
                        else if (pluginSpec is ISchemeComp)
                        {
                            pluginSpec.AppDirs = appDirs;
                            pluginSpec.Log     = log;
                            pluginSpec.Init();

                            if (AddComponents((ISchemeComp)pluginSpec, attrTranslator))
                            {
                                log.WriteAction(string.Format(Localization.UseRussian ?
                                                              "Загружены компоненты из файла {0}" :
                                                              "Components are loaded from the file {0}", fileName));
                            }
                            else
                            {
                                log.WriteAction(string.Format(Localization.UseRussian ?
                                                              "Не удалось загрузить компоненты из файла {0}" :
                                                              "Unable to load components from the file {0}", fileName));
                            }
                        }
                        else
                        {
                            log.WriteError(string.Format(Localization.UseRussian ?
                                                         "Библиотека {0} не предоставляет компоненты схем" :
                                                         "The assembly {0} does not provide scheme components", fileName));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                log.WriteException(ex, Localization.UseRussian ?
                                   "Ошибка при загрузке компонентов из файлов" :
                                   "Error loading components from files");
            }
        }
Esempio n. 3
0
 /// <summary>
 /// Конструктор
 /// </summary>
 public PluginItem(PluginSpec pluginSpec, PlaginStates state)
 {
     State    = state;
     Name     = pluginSpec.Name;
     Descr    = pluginSpec.Descr;
     Version  = pluginSpec.Version;
     FileName = Path.GetFileName(Assembly.GetAssembly(pluginSpec.GetType()).Location);
 }
Esempio n. 4
0
        private UserData userData; // данные пользователя приложения


        /// <summary>
        /// Получить все доступные плагины
        /// </summary>
        private List <PluginItem> GetAllPlugins()
        {
            List <PluginItem> pluginItems       = new List <PluginItem>();
            HashSet <string>  existingFileNames = GetExistingFileNames();
            HashSet <string>  settingsFileNames = GetSettingsFileNames();
            HashSet <string>  allFileNames      = new HashSet <string>();

            allFileNames.UnionWith(existingFileNames);
            allFileNames.UnionWith(settingsFileNames);
            Dictionary <string, PluginItem> activePlugins = GetActivePlugins();

            foreach (string fileName in allFileNames)
            {
                PluginItem pluginItem;

                if (activePlugins.TryGetValue(fileName, out pluginItem))
                {
                    // добавление активного плагина
                    pluginItems.Add(pluginItem);
                }
                else if (settingsFileNames.Contains(fileName))
                {
                    // добавление активного, но не загруженного плагина
                    pluginItems.Add(new PluginItem(fileName, "", "", fileName, PlaginStates.NotLoaded));
                }
                else
                {
                    // загрузка спецификации неактивного плагина
                    string     errMsg;
                    PluginSpec pluginSpec = PluginSpec.CreateFromDll(appData.AppDirs.BinDir + fileName, out errMsg);

                    if (pluginSpec == null)
                    {
                        appData.Log.WriteError(errMsg);
                    }
                    else
                    {
                        pluginItems.Add(new PluginItem(pluginSpec, PlaginStates.Inactive));
                    }
                }
            }

            pluginItems.Sort();
            return(pluginItems);
        }
Esempio n. 5
0
 public void Add(PluginSpec plugin)
 {
     this.BaseAdd(plugin);
 }
Esempio n. 6
0
    protected override object GetElementKey(ConfigurationElement element)
    {
        PluginSpec retVal = element as PluginSpec;

        return(retVal.Name);
    }