using System; using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; namespace ReflectiveConfiguration { public abstract class Configuration { Dictionary sections = new Dictionary(); public Configuration() { ConfigurationSection defaultSection = this[""]; } public Configuration(String path){ LoadFrom(path); } public ConfigurationSection this[string name] { get { if (sections.ContainsKey(name)) { return sections[name]; } return createSection(name); } } public Dictionary.KeyCollection Keys { get { return this.sections.Keys; } } public void LoadFrom(String path) { using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read)) { LoadFrom(stream); } } public void SaveTo(String path) { using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write)) { SaveTo(stream); } } public abstract ConfigurationSection createSection(String name); public abstract void LoadFrom(Stream stream); public abstract void SaveTo(Stream stream); } }