如何在Asp.net核心中实现自动更新选择

  介绍

如何在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

如何在Asp.net核心中实现自动更新选择