.net core 配置变更监听 电脑版发表于:2020/6/23 10:37 ![.netcore](https://img.tnblog.net/arcimg/hb/c857299a86d84ee7b26d181a31e58234.jpg ".netcore") >#.net core 配置变更监听 [TOC] <br/> 场景 ------------ <br/> - 需要记录配置源的变更时 - 需要在配置数据变更时出发特定操作时 <br/> 关键方法 ------------ <br/> `IChangeToken IConfiguration.GetReloadToken()` <br/> 简单示例 ------------ <br/> >###项目结构 <br/> >内容请参考:https://www.tnblog.net/hb/article/details/4140 <br/> >###修改内容 <br/> ><font style="color:#2ecc71;font-weight:bold;">Program.cs</font> ```csharp var builder = new ConfigurationBuilder(); builder.AddJsonFile("appsetting.json",optional:false,reloadOnChange:true); var configurationRoot = builder.Build(); IChangeToken changeToken = configurationRoot.GetReloadToken(); changeToken.RegisterChangeCallback(state => { Console.WriteLine($"Key1:{configurationRoot["Key1"]}"); Console.WriteLine($"Key2:{configurationRoot["Key2"]}"); Console.WriteLine($"Key3:{configurationRoot["Key3"]}"); }, configurationRoot); Console.ReadKey(); ``` >运行结果 ![运行结果](https://img.tnblog.net/arcimg/hb/ef04977c52f84ba09c01ac6d52e77b0e.png) >问题的原因是:changeToken这个对象只能注册一次 <br/> >###解决问题 <br/> >微软提供了特定的解决方法,修改代码如下: ```csharp var builder = new ConfigurationBuilder(); builder.AddJsonFile("appsetting.json",optional:false,reloadOnChange:true); var configurationRoot = builder.Build(); ChangeToken.OnChange(() => configurationRoot.GetReloadToken(), () => { Console.WriteLine($"Key1:{configurationRoot["Key1"]}"); Console.WriteLine($"Key2:{configurationRoot["Key2"]}"); Console.WriteLine($"Key3:{configurationRoot["Key3"]}"); }); Console.ReadKey(); ``` >运行结果(更改多次没有问题) ![运行结果](https://img.tnblog.net/arcimg/hb/54fa61537d3c42a59203a0842b6f7b9a.png)