using Microsoft.Extensions.Configuration; namespace OptionStudy.UnitApp { /// /// 5.1.6 根据环境动态加载配置文件 /// public class DynamicLoadConfigFileTest : IDisposable { private readonly ITestOutputHelper? testOutput; public DynamicLoadConfigFileTest(ITestOutputHelperAccessor helperAccessor) { testOutput = helperAccessor.Output; } /// /// 动态加载json配置文件 /// [Theory] [InlineData("product")] [InlineData("development")] [InlineData("custom")] public void LoadJsonFile_ByPara_Test(string env) { var config = new ConfigurationBuilder() .AddJsonFile($"Configs/appsettings.{env}.json", true, true) .Build(); var appOption = config.Get(); //断言 Assert.NotNull(appOption); Assert.Equal($"{env}AppName", appOption.AppName); Assert.Equal("0.0.0.1", appOption.AppVersion); //子配置节:父配置对象的属性名必须和配置KEY保持一致,否则不能自动绑定。 Assert.NotNull(appOption.EMail); Assert.Equal($"{env}@163.com", appOption.EMail.ReceiveAddress); Assert.Equal($"{env}", appOption.EMail.Recipient); testOutput?.WriteLine("根据参数名,动态加载json配置文件!"); } /// /// 根据环境变量动态加载json配置文件 /// 环境变量类别:系统环境变量、用户环境变量、进程环境变量 /// 环境变量使用: /// 1、对操作系统设置 /// 2、项目启动文件:项目/Properties/launchSettings.json /// 3、编程实现: System.Environment.SetEnvironmentVariable("环境变量名","值",环境变量类型) /// 4、使用cmd命令行参数运行程序: /// /// set 环境变量名=环境变量值 /// dotnet xx.dll /// # 或者 /// xx.exe /// /// [Theory] [InlineData("product")] [InlineData("development")] [InlineData("custom")] public void LoadJsonFileByEnv_Test(string env) { //设置进程系统变量为参数值 var envName = "DOTNET_XUNIT_TEST"; //设置进程环境变量 System.Environment.SetEnvironmentVariable(envName, env, EnvironmentVariableTarget.Process); //获取变量值 var envValue = System.Environment.GetEnvironmentVariable(envName, EnvironmentVariableTarget.Process); var config = new ConfigurationBuilder() .AddJsonFile($"Configs/appsettings.json", false, true) .AddJsonFile($"Configs/appsettings.{envValue}.json", true, true) .Build(); var appOption = config.Get(); //断言 Assert.NotNull(appOption); Assert.Equal($"{envValue}AppName", appOption.AppName); Assert.Equal("0.0.0.1", appOption.AppVersion); //子配置节:父配置对象的属性名必须和配置KEY保持一致,否则不能自动绑定。 Assert.NotNull(appOption.EMail); Assert.Equal($"{envValue}@163.com", appOption.EMail.ReceiveAddress); Assert.Equal($"{envValue}", appOption.EMail.Recipient); testOutput?.WriteLine("根据环境变量值,动态加载json配置文件!"); } public void Dispose() { } } }