Пример #1
0
        /// <summary>
        /// Allocate and initialize class resources.
        /// </summary>
        static ConfigManager()
        {
            s_CfgMutex       = new Mutex(false);
            s_ReaderSettings = new XmlReaderSettings();
            s_ReaderSettings.ConformanceLevel = ConformanceLevel.Fragment;
            s_ReaderSettings.IgnoreWhitespace = true;
            s_WriterSettings = new XmlWriterSettings();
            s_WriterSettings.ConformanceLevel   = ConformanceLevel.Fragment;
            s_WriterSettings.Indent             = true;
            s_WriterSettings.OmitXmlDeclaration = true;
            s_Sources = new List <IConfigSource>();
            //add default local source
            DataStore settings = new DataStore();

            settings.Create <bool>("ReadOnly");
            try
            {
                AddSource <FileSource>(settings);
            }
            catch (Exception ex)
            {
                throw new ZeusException(ErrorCodes.ConfigManagerInitFailed, ex.Message);
            }
            //try read configuration file
            ConfigSettings configSettings = null;
            //get configuration file source
            IConfigSource source     = s_Sources.First();
            Stream        dataStream = source.Open();

            using (XmlReader xr = XmlReader.Create(dataStream, s_ReaderSettings))
            {
                //move to root node
                xr.MoveToContent();
                //search for requested section
                if (xr.IsStartElement("config") || xr.ReadToFollowing("config"))
                {
                    //check if config section has been found
                    if (xr.NodeType != XmlNodeType.None)
                    {
                        //create config settings instance
                        configSettings = new ConfigSettings();
                        //read settings from xml file
                        IXmlSerializable serializer = configSettings as IXmlSerializable;
                        serializer.ReadXml(xr);
                    }
                }
            }
            //close the configureation file
            source.Close();
            //if settings exists apply them
            if (configSettings != null)
            {
                //get the add source method
                MethodInfo addSourceMethod = typeof(ConfigManager).GetMethod("AddSource");
                if (addSourceMethod != null)
                {
                    foreach (KeyValuePair <Type, DataStore> sourceSettings in configSettings.Sources)
                    {
                        //add the configured sources
                        addSourceMethod.MakeGenericMethod(sourceSettings.Key).Invoke(null, new[] { sourceSettings.Value });
                    }
                }
            }
        }