介绍
如何在Asp.net核心中实现自动更新选择吗?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
Asp.net核心可以监视json、xml等配置文件的变化,自动刷新内存中的配置内容,但如果想每隔1秒从动物园管理员,领事获取最新的配置信息,需要自己实现。
阅读了Asp.net核心文件的自定义配置提供者,得知只需要实现自己的IConfigurationSource和对应ConfigurationProvider即可
在这个示例中,我建立了一个简单的选项,只包含一个不断变化的计数器变量。
public class RefreshableOptions { public 才能int IncreasementCount {组,得到,,,} }
实现IConfigurationSource和对应ConfigurationProvider,内部有一个计时器模拟从外部获取了最新的数据,这里为简单起见,采用硬编码的方式指定了选择的路径
public class AutoRefreshConfigurationSource : IConfigurationSource { public 才能;IConfigurationProvider 构建(IConfigurationBuilder 构建器) {才能 ,,,return new AutoRefreshConfigurationProvider (); ,,} } public class AutoRefreshConfigurationProvider : ConfigurationProvider { private 才能int count =, 0; private 才能;bool  isChanged; public 才能;AutoRefreshConfigurationProvider(),:,基地() {才能 ,,,Timer Timer =, new 计时器(TimerCallback); ,,,timer.Change (1000,, 3000); ,,} public 才能;override  void 负载() {才能 ,,,var beforeData =,数据; ,,,//,这里采用硬编码指定选择的路径 ,,,Data =, new Dictionary<字符串,string> (), {, {,“AutoRefreshOptions: IncreasementCount",, count.ToString (),},}; ,,,isChanged =, IsDictionaryChanged (beforeData,数据); ,,} private 才能;void  TimerCallback (object 状态) {才能 ,,,计数+ +; ,,,this.Load (); ,,,if (isChanged) ,,,{ ,,,,,base.OnReload();//通知IConfiguration实例,,有参数发生了改变 ,,,,,isChanged =,假; ,,,} ,,}//才能判断两个Idictionary是否有不同的帮助方法 private 才能static bool  IsDictionaryChanged(字符串,IDictionary,,, IDictionary<字符串,string>,后) {才能 ,,,if (before ==, null ,,, after ==, null) ,,,{ ,,,,,return 假; ,,,} ,,,if ((==before null), !=, (after ==, null)) ,,,{ ,,,,,return 真实; ,,,} ,,,if (before.Count !=, after.Count) ,,,{ ,,,,,return 真实; ,,,} ,,,var ignoreCaseBefore =, new Dictionary<字符串,string>(之前,StringComparer.OrdinalIgnoreCase); ,,,foreach (var afterItemKey  after.Keys拷贝) ,,,{ ,,,,,if (! ignoreCaseBefore.TryGetValue (afterItemKey, out var beforeItemValue)) ,,,,,{ ,,,,,,,return 真实; ,,,,,} ,,,,,if (beforeItemValue !=,后[afterItemKey]) ,,,,,{ ,,,,,,,return 真实; ,,,,,} ,,,,,ignoreCaseBefore.Remove (afterItemKey); ,,,} ,,,if (ignoreCaseBefore.Count 祝辞,0) ,,,{ ,,,,,return 真实; ,,,} ,,,return 假; ,,} }
实现扩展方法
public static class AutoRereshConfigurationExtensions { public 才能static IConfigurationBuilder  AddAutoRereshConfiguration(却;能够IConfigurationBuilder 构建器) {才能 ,,,return builder.Add (new AutoRefreshConfigurationSource ()); ,,} }
使用方法
新建一个WebApi项目,在程序。CreateWebHostBuilder中增加黄色部分
WebHost.CreateDefaultBuilder (args) .ConfigureAppConfiguration才能(config =比; {才能 ,,,config.AddAutoRereshConfiguration (); })才能 .UseStartup<才能;Startup> ();
在启动。null null null null null null null null null null null null null null null null