.NET CORE中的配置系统

1.在.NET CORE中读取json文件
需要用到的NuGet包:Microsoft.Extensions.Configuration 、Microsoft.Extensions.Configuration.Json
2.读取配置的方法
ConfigurationBuilder configBuilder = new ConfigurationBuilder();
configBuilder.AddJsonFile(path:"json1.json", optional:true,reloadOnChange:true)//绑定json 文件 optionl 表示文件是否可选,reloadOnChange文件发生修改是否重新加载配置
var config = configBuilder.Build(); //构建
//读取json文件
Console.WriteLine(config.GetValue("name:age"));
Console.WriteLine(config.GetSection("name:age").Value);
Console.WriteLine(config["name:age"]);
//将json文件转化成实体类进行读取
var pro= config.GetSection("proxy").Get();
2.使用DI进行配置读取json文件
需要安装的NuGe包:Microsoft.Extensions.Options 、Microsoft.Extensions.Configuration.Binder、Microsoft.Extensions.Configuration 、Microsoft.Extensions.Configuration.Json
读取配置时 DI要声明IOptions(不会渎取到新的配置)、IOptionsMonitor(总是读取到新的配置)、IOptionsSnapshot(在同一个scope中读到的配置相同,推荐)等类型
//注册options AddJsonFileConfig

services.AddJsonFileConfig();
services.AddOptions().Configure<ServerProxy>(e => config.GetSection("proxy").Bind(e));

 public class JsonFileService : IConfigService
    {
        private readonly IOptionsSnapshot<ServerProxy> optionConfig;

        public JsonFileService(IOptionsSnapshot<ServerProxy> optionConfig)
        {
           this.optionConfig = optionConfig;
        }
        public string GetValue()
        {
            //Console.WriteLine(optionConfig.Value.Address);
            //Console.WriteLine(optionConfig.Value.Port);
            return optionConfig.Value.Address;
        }
    }
  //进行调用
using (ServiceProvider sp = services.BuildServiceProvider())
{
	while (true)
	{
		//var sss= sp.GetService<IConfigService>();//在同一个scope中修改文件不会立即生效
		using (var c = sp.CreateScope())
		{
			var sss = c.ServiceProvider.GetService<IConfigService>();
			Console.WriteLine(sss.GetValue() + "*********1");
			Console.ReadKey();
			Console.WriteLine(sss.GetValue() + "*********2");
		}
		Console.ReadKey();
	}

}

3.从命令行参数中读取配置信息
需要用到的NuGet包 Microsoft.Extensions.Configuration.CommandLine
//注册服务
configBuilder.AddCommandLine(args);
//注释掉json文件的配置
//configBuilder.AddJsonFile(path:"json1.json", optional:true,reloadOnChange:true);//绑定json 文件 设置可选项
//配置绑定实体
services.AddOptions().Configure(e => config.GetSection("proxy").Bind(e));

 public class CmdService : IConfigService
    {
        private readonly IOptionsSnapshot<ServerProxy> optionConfig;

        public CmdService(IOptionsSnapshot<ServerProxy> optionConfig)
        {
           this.optionConfig = optionConfig;
        }
        public string GetValue()
        {
            //Console.WriteLine(optionConfig.Value.Address);
            //Console.WriteLine(optionConfig.Value.Port);
            return optionConfig.Value.Address;
        }
    }

//进行调用

using (ServiceProvider sp = services.BuildServiceProvider())
{
	while (true)
	{
		//var sss= sp.GetService<IConfigService>();//在同一个scope中修改文件不会立即生效
		using (var c = sp.CreateScope())
		{
			var sss = c.ServiceProvider.GetService<IConfigService>();
			Console.WriteLine(sss.GetValue() + "*********1");
			Console.ReadKey();
			Console.WriteLine(sss.GetValue() + "*********2");
		}
		Console.ReadKey();
	}

}

//命令行传参要对参数进行扁平化处理
//通过命令行启动 传入参数dotnet ConsoleAppMailSender.dll proxy:address=10000 proxy:port=3000
//也可以在项目-->属性-->调试-->常规-->命令行参数 进行配置
4.从环境变量中读取配置
需要安装的NuGet包:Microsoft.Extensions.Configuration.EnvironmentVariables
configBuilder.AddEnvironmentVariables();//从VS环境变量中读取配置信息(避免修改系统环境变量导致系统出问题) 项目属性--》调试--》环境变量 也是扁平化配置
services.AddOptions().Configure(e => config.GetSection("proxy").Bind(e));

posted @ 2022-06-29 16:05  Wilson_it  阅读(64)  评论(0编辑  收藏  举报