读取Json 文件配置
1、创建一个json文件
2、NuGet安装Microsoft.Extensions.Configuration和Microsoft.Extensions.Configuration.Json。
3、编写代码
ConfigurationBuilder configBuilder=new ConfigurationBuilder();
ConfigBuilde.AddJsonFile("文件名.json",optical:false,reloadOnChange:true);
IConfigurationRoot config=configBuilder.Build();
string name=config["name"];//单级读取
string proxyAddress=config.GetSection("proxy:address").Value;//多级读取
optical参数表示这个文件是否可选。
reloadOnChange参数表示如果文件修改了是否重新加载配置。
上面的的方式比较土。下面有绑定读取配置。
json文件
{
"name":"liu”,
"stu":{"xh":200001,"sex":"男"}
}
1、可以绑定一个类,自动完成配置读取。
Class Stu{
public stringx Xh{get;set;}
public stringx Sex{get;set;}
}
Class Config{
public stringx name{get;set;}
public Stu stu{get;set;}
}
2、NUGet安装:Microsoft.Extensions.Configuration.Binder
3、
Config Config=config.Get<Config>();
Config.name();
Config.stu.Xh();
Config.stu.Sex();
最推荐的Json读配置,和DI依赖注入结合更好,且更好利用“reloadonchange"机制。
NUGet安装:Microsoft.Extensions.Options、Microsoft.Extensions.Configuration.Binder、Microsoft.Extensions.Configuration和Microsoft.Extensions.Configuration.Json。
读配置的时候,DI要声明IOptions<T>、IOptionsMonitor<T>、IOptionsSnapshot<T>等类型。
IOptions<T>不会读取到新的值;和IOptionsMonitor<T>相比,IOptionsSnapshot<T>会在同一个范围内,比如ASP.NET Core一个请求中保持一致。建议用IOptionsSnapshot。
1、再读配置的地方,用IOptionsSnapshot<T>注入。不要在构造函数里直接读取IOptionsSnapshot.Value,而是在用到的地方在读取,否则就无法更新变化。
Class Stu{
public stringx Xh{get;set;}
public stringx Sex{get;set;}
}
Class Config{
public stringx name{get;set;}
public Stu stu{get;set;}
}
class 类名{
private readonly IOptionsSnapshot<Config> OptConfig;
public 类名(IOptionsSnapshot<Config> OptConfig){
this.OptConfig=OptConfig;
}
//测试方法
public void Test(){
//打印学号
Console.WriteLine(OptConfig.Value.stu.Xh);
}
}
DI机制启用这个类
static void Main(string [] args){
ServiceCollection services=new ServiceCollection();
services.AddScoped<类名>();
ConfigurationBuilder configBuilder=new ConfigurationBuilder();
ConfigBuilde.AddJsonFile("文件名.json",optical:false,reloadOnChange:true);
IConfigurationRoot config=configBuilder.Build();
//将AddOptions添加到DI容器中 将Config绑定到根节点
services.AddOptions().Configure<Config>(e=>config.Bind(e));//可以多个Configure
using (var sp=services.BuildServiceProvider()){
var c=sp.GetRequiredService<类名>();
c.Test();
}
}
//多个Configure写法,(e=>Stu.GetSection("stu").Bind(e));把Stu绑定到根节点
services.AddOptions()
.Configure<Config>(e=>config.Bind(e))
.Configure<Stu>(e=>Stu.GetSection("stu").Bind(e));