C#/.Net实现不停止项目动态热加载配置文件信息

627 阅读1分钟

一、配置appsettings.json

这里我就简单的随便写了一点东西*

     {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "JwtConfig": {
        "Issuer": "www.adsfsadfasdf",
        "Audience": "www.adsfsadfasdf",
        "SecretKey": "nadjhfgkadshgoihfkajhkjdhsfaidkuahfhdksjaghidshyaukfhdjks"
      },
      "AllowedHosts": "*",
      "IP": "http://10.0.10.158111"
    }

二、写一个存储配置信息的容器

我这里写了一个示例,静态字段可供项目中其他地方使用,非静态的属性字段是用来默认提取appsettings.json配置信息的

public class MyIp
{
    public string IP { get; set; }

    public static string MyIP { get; set; }
}

三、配置信息热加载注册

我这是一个.net6.0的项目。

在项目的Program文件中,找到var app = builder.Build();这一行,在上面写注册信息,在下面写监听信息

//把配置文件注册到配置信息Configuration程序集中,设置文件可更改,文件更改重新加载属性为True
builder.Configuration.AddJsonFile("appsettings.json", true, true);

var app = builder.Build();

//app.Configuration.Get<MyIp>() 依赖注入MyIp IOC容器
MyIp.MyIP = app.Configuration.Get<MyIp>().IP;
Console.WriteLine(MyIp.MyIP);
//监听变化事件,设置委托为监听appJson文件变化,设置委托变化后执行事件
ChangeToken.OnChange(() => app.Configuration.GetReloadToken(), () =>
{
    //重新绑定代码中配置信息
    MyIp.MyIP = app.Configuration.Get<MyIp>().IP;
    Console.WriteLine(MyIp.MyIP);
});

image.png 如图,我项目没有停止,更改配置文件信息,他实时加载了配置信息。