读取Json 文件配置

读取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));

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值