예제 #1
0
        internal static LabelStorage LoadStorage(string file, List<Label> systemLabels, IEventLogging logging)
        {
            string xmlPath = file;
            string xsdPath = Path.ChangeExtension(file, "xsd");

            XmlSerializer serializer = new XmlSerializer(typeof(LabelStorage));
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.ValidationType = ValidationType.Schema;
            settings.Schemas.Add("urn:labelstorage-schema", xsdPath);
            LabelStorage storage = null;
            //settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
            using (XmlReader reader = XmlReader.Create(xmlPath, settings))
            {
                storage = (LabelStorage)serializer.Deserialize(reader);
            }
            // теперя надо проверить, что нет пользовательских меток, совпадающих с системными. если есть - пользовательские надо удалять
            List<Label> toRemove = storage.FindAll(
                label =>
                systemLabels.Any(
                    syslab =>
                    syslab.Id == label.Id || syslab.Name.Equals(label.Name, StringComparison.InvariantCultureIgnoreCase)));
            foreach (Label item in toRemove)
            {
                logging.WriteWarning(string.Format("Пользовательская метка <{0}> удалена ввиду конфликта названия или идентификатора с одноименной системной меткой", item.Name));
            }
            storage.RemoveAll(label=>toRemove.Any(tor => object.ReferenceEquals(tor, label)));
            // и оптяь сохраним
            storage.SaveStorage(file);
            return storage;
        }
예제 #2
0
        public ModuleLoader(IEventLogging logging)
        {
            Debug.Assert(logging != null, "Нет системы логирования");
            _logService = logging;

            string path = Path.GetFullPath(Settings.Default.ModuleFolder);
            if (!Directory.Exists(path))
                _logService.WriteWarning(String.Format(LoadingWarning, path));

            string[] fileList = Directory.GetFiles(path, "*.dll", SearchOption.AllDirectories);
            IEnumerable<string> libraryList = getFilesByAttribyte(fileList);
            _moduleList = loadInstanceFromAssembly(libraryList, logging);
        }