public void MultiChange()
        {
            var xmlFileLoader = new XmlFileSettingsLoader(Global.GenericDeserializer, Global.PlainConverter);

            string cfgMainFile = Path.GetTempFileName();
            string cfgAdditionalFile = Path.GetTempFileName();

            File.WriteAllText(cfgAdditionalFile, _xmlCfgAutoOrigin);
            File.WriteAllText(cfgMainFile, string.Format(_xmlCfgMain, cfgAdditionalFile));

            var loader = new SettingsLoader(xmlFileLoader);
            loader.LoadSettings(xmlFileLoader.LoadFile(cfgMainFile));

            IAppSettings settings = loader.Settings;

            var wait = new ManualResetEvent(false);
            ((IChangeable)settings).Changed += (s, e) => { wait.Set(); };

            var t = Task.Factory.StartNew(() =>
            {
                File.WriteAllText(cfgAdditionalFile, _xmlCfgAutoModify);
            }, TaskCreationOptions.LongRunning);

            Task.WaitAll(t);

            Assert.IsTrue(wait.WaitOne(10000), "10 sec elapsed");
        }
        private static IAppSettings LoadSettings(string file)
        {
            var xmlFileLoader = new XmlFileSettingsLoader(Global.GenericDeserializer, Global.PlainConverter);
            var jsonFileLoader = new JsonFileSettingsLoader(Global.GenericDeserializer, Global.PlainConverter);
            var iniFileLoader = new IniFileSettingsLoader(Global.GenericDeserializer, Global.PlainConverter);

            var loader = new SettingsLoader(xmlFileLoader, jsonFileLoader, iniFileLoader);
            loader.Loaded += (s, e) =>
            {
                Console.WriteLine("Loaded: {0} ({1})", e.Settings.GetType(), e.Settings.Identity);
            };

            if (Path.GetExtension(file) == ".xml")
                loader.LoadSettings(xmlFileLoader.LoadFile(Path.Combine("Including", file)));
            else
                loader.LoadSettings(jsonFileLoader.LoadFile(Path.Combine("Including", file)));

            return loader.Settings;
        }
        public void Load()
        {
            var xmlFileLoader = new XmlFileSettingsLoader(Global.GenericDeserializer, Global.PlainConverter);

            var loader = new SettingsLoader(xmlFileLoader);
            loader.Loaded += (s,e) =>
            {
                Console.WriteLine("Loaded: {0} ({1})", e.Settings.GetType(), e.Settings.Identity);
            };

            loader.LoadSettings(xmlFileLoader.LoadFile("Examples/AppDirectory/main.config"));

            IAppSettings settings = loader.Settings;

            var addCfg = settings.TryCombine<ExampleCombineConfig>("AdditionalConfig");

            Assert.IsNotNull(addCfg);
            Assert.AreEqual("InAppDirectory", addCfg.F);
        }
        public void AutoCombineLoad()
        {
            var xmlFileLoader = new XmlFileSettingsLoader(Global.GenericDeserializer, Global.PlainConverter);

            var loader = new SettingsLoader(xmlFileLoader);
            loader.Loaded += (s, e) =>
            {
                Console.WriteLine("Loaded: {0} ({1})", e.Settings.GetType(), e.Settings.Identity);
            };

            loader.LoadSettings(xmlFileLoader.LoadFile("Examples/AppDirectory/autoMain.config"));

            var settings = new CombinableAppSettings(loader.Settings, Global.GenericCombiner);

            var cfg = settings.TryGet<ChildAutoCombinableConnectionConfig>();

            var cfgs = settings.Settings.LoadCollection<ChildAutoCombinableConnectionConfig>().ToArray();

            Assert.IsNotNull(cfg);
            Assert.AreEqual("Server=localhost;Database=workDb;User ID=admin;Password=pass;Trusted_Connection=True;Connection Timeout=60", cfg.ConnectionString);
        }
        public void AutoChange()
        {
            string cfgFile = Path.GetTempFileName();
            File.WriteAllText(cfgFile, _xmlCfgAutoOrigin);

            var xmlFileLoader = new XmlFileSettingsLoader(Global.GenericDeserializer, Global.PlainConverter);

            IAppSettings settings = xmlFileLoader.LoadFile(cfgFile);

            var wait = new ManualResetEvent(false);
            ((IChangeable)settings).Changed += (a, e) => { wait.Set(); };

            var t = Task.Factory.StartNew(() =>
            {
                File.WriteAllText(cfgFile, _xmlCfgAutoModify);
            }, TaskCreationOptions.LongRunning);

            Task.WaitAll(t);

            Assert.IsTrue(wait.WaitOne(10000), "10 sec elapsed");

            settings = xmlFileLoader.LoadFile(cfgFile);
            Assert.That(settings.First<ExampleCombineConfig>("AdditionalConfig").F, Is.EqualTo("Modify"));
        }
        public void SecureLoad()
        {
            KeyManager.Create();

            var providerLoader = new ProviderLoader();
            var xmlFileLoader = new XmlFileSettingsLoader(Global.GenericDeserializer, Global.PlainConverter);

            var loader = new SettingsLoader(xmlFileLoader);
            loader.Loaded += providerLoader.TryExtractConfigProtectedData;

            loader.Loaded += (s, e) =>
            {
                Console.WriteLine("Loaded: {0} ({1})", e.Settings.GetType(), e.Settings.Identity);
            };

            loader.LoadSettings(xmlFileLoader.LoadFile("Examples/AppDirectory/secureMain.config"));

            IAppSettings settings = loader.Settings;

            var addCfg = settings.TryCombine<ExampleCombineConfig>("AdditionalConfig");

            Assert.IsNotNull(addCfg);
            Assert.AreEqual("InUpDirectory", addCfg.F);

            Assert.AreEqual("Server=localhost;Database=workDb;User ID=admin;Password=pass;", settings.TryFirst<ConnectionConfig>("MyExtConnection").ConnectionString);
            Assert.AreEqual("Server=localhost;Database=workDb;User ID=admin;Password=pass;", settings.TryFirst<ConnectionConfig>("MySecuredConnection").ConnectionString);

            KeyManager.Delete();
        }