/// <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 }); } } } }