.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
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
//注册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
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