static void Main(string[] args) { //Load configuration files - configuration files are loaded general -> specific. //Files that are loaded later overwrite the ones that are loaded earlier ConfigurationManager.AddConfiguration("Global_Config_Standard.txt"); //Layer 0 ConfigurationManager.AddConfiguration("Global_Config_ProjectSpecific.txt"); //Layer 1 ConfigurationManager.AddConfiguration("Global_Config_ExperimentSpecifix.txt"); //Layer 2 //Configure custom model var config = ConfigurationManager.Configure <CustomConfig>(); //When using Configure method options can be access via property accessors example Console.WriteLine($"Number of systems: {config.NumberOfSystems}"); Console.WriteLine("Get all loaded configuration entries"); foreach (var entry in ConfigurationManager.GetAll()) { Console.WriteLine($"{entry.Key}: {entry.Value}"); } Console.WriteLine("Get specific entry as string"); Console.WriteLine($"OrdersPerHour: {ConfigurationManager.GetValueAsString("OrdersPerHour")}"); Console.WriteLine($"OrderLinesPerOrder: {ConfigurationManager.GetValueAsString("OrderLinesPerOrder")}"); Console.WriteLine("Get specific entry casted"); Console.WriteLine($"OrdersPerHour: {ConfigurationManager.GetValue<int>("OrdersPerHour")}"); //Throws exception if wrong cast //Console.WriteLine($"{ConfigurationManager.GetValue<bool>("OrdersPerHour")}"); Console.Read(); }
public void CanChainConfiguration() { // Arrange var dic1 = new Dictionary <string, string>() { { "Mem1:KeyInMem1", "ValueInMem1" } }; var dic2 = new Dictionary <string, string>() { { "Mem2:KeyInMem2", "ValueInMem2" } }; var dic3 = new Dictionary <string, string>() { { "Mem3:KeyInMem3", "ValueInMem3" } }; var memConfigSrc1 = new MemoryConfigurationSource { InitialData = dic1 }; var memConfigSrc2 = new MemoryConfigurationSource { InitialData = dic2 }; var memConfigSrc3 = new MemoryConfigurationSource { InitialData = dic3 }; var config = new ConfigurationManager(); IConfigurationBuilder configurationBuilder = config; // Act configurationBuilder.Add(memConfigSrc1); configurationBuilder.Add(memConfigSrc2); configurationBuilder.Add(memConfigSrc3); var chained = new ConfigurationManager(); chained.AddConfiguration(config); var memVal1 = chained["mem1:keyinmem1"]; var memVal2 = chained["Mem2:KeyInMem2"]; var memVal3 = chained["MEM3:KEYINMEM3"]; // Assert Assert.Equal("ValueInMem1", memVal1); Assert.Equal("ValueInMem2", memVal2); Assert.Equal("ValueInMem3", memVal3); Assert.Null(chained["NotExist"]); }
public void ChainedConfigurationIsDisposedOnDispose(bool shouldDispose) { var provider = new DisposableTestConfigurationProvider("foo", "foo-value"); var chainedConfig = new ConfigurationRoot(new IConfigurationProvider[] { provider }); var config = new ConfigurationManager(); config.AddConfiguration(chainedConfig, shouldDisposeConfiguration: shouldDispose); Assert.False(provider.IsDisposed); config.Dispose(); Assert.Equal(shouldDispose, provider.IsDisposed); }
public void ChainedAsEnumerateFlattensIntoDictionaryTest(bool removePath) { // Arrange var dic1 = new Dictionary <string, string>() { { "Mem1", "Value1" }, { "Mem1:", "NoKeyValue1" }, { "Mem1:KeyInMem1", "ValueInMem1" }, { "Mem1:KeyInMem1:Deep1", "ValueDeep1" } }; var dic2 = new Dictionary <string, string>() { { "Mem2", "Value2" }, { "Mem2:", "NoKeyValue2" }, { "Mem2:KeyInMem2", "ValueInMem2" }, { "Mem2:KeyInMem2:Deep2", "ValueDeep2" } }; var dic3 = new Dictionary <string, string>() { { "Mem3", "Value3" }, { "Mem3:", "NoKeyValue3" }, { "Mem3:KeyInMem3", "ValueInMem3" }, { "Mem3:KeyInMem3:Deep3", "ValueDeep3" } }; var memConfigSrc1 = new MemoryConfigurationSource { InitialData = dic1 }; var memConfigSrc2 = new MemoryConfigurationSource { InitialData = dic2 }; var memConfigSrc3 = new MemoryConfigurationSource { InitialData = dic3 }; var config1 = new ConfigurationManager(); IConfigurationBuilder configurationBuilder = config1; // Act configurationBuilder.Add(memConfigSrc1); configurationBuilder.Add(memConfigSrc2); var config2 = new ConfigurationManager(); config2 .AddConfiguration(config1) .Add(memConfigSrc3); var dict = config2.AsEnumerable(makePathsRelative: removePath).ToDictionary(k => k.Key, v => v.Value); // Assert Assert.Equal("Value1", dict["Mem1"]); Assert.Equal("NoKeyValue1", dict["Mem1:"]); Assert.Equal("ValueDeep1", dict["Mem1:KeyInMem1:Deep1"]); Assert.Equal("ValueInMem2", dict["Mem2:KeyInMem2"]); Assert.Equal("Value2", dict["Mem2"]); Assert.Equal("NoKeyValue2", dict["Mem2:"]); Assert.Equal("ValueDeep2", dict["Mem2:KeyInMem2:Deep2"]); Assert.Equal("Value3", dict["Mem3"]); Assert.Equal("NoKeyValue3", dict["Mem3:"]); Assert.Equal("ValueInMem3", dict["Mem3:KeyInMem3"]); Assert.Equal("ValueDeep3", dict["Mem3:KeyInMem3:Deep3"]); }