国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - Asp.net core中實現自動更新的Option的方法示例

Asp.net core中實現自動更新的Option的方法示例

2019-06-19 17:04zhouandke ASP.NET教程

這篇文章主要介紹了Asp.net core中實現自動更新的Option的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Asp.net core可以監視json、xml等配置文件的變化, 自動刷新內存中的配置內容, 但如果想每隔1秒從zookeeper、consul獲取最新的配置信息, 需要自己實現.

閱讀了 Asp.net core Document的Custom configuration provider, 得知只需要實現自己的IConfigurationSource和對應ConfigurationProvider即可

在這個示例中, 我建立了一個簡單的option, 只包含一個不斷變化的計數器變量.

public class RefreshableOptions
{
  public int IncreasementCount { get; set; }
}

實現IConfigurationSource和對應ConfigurationProvider, 內部有一個timer模擬從外部獲取了最新的數據, 這里為簡單起見, 采用硬編碼的方式指定了option的路徑

public class AutoRefreshConfigurationSource : IConfigurationSource
{
  public IConfigurationProvider Build(IConfigurationBuilder builder)
  {
    return new AutoRefreshConfigurationProvider();
  }
}

public class AutoRefreshConfigurationProvider : ConfigurationProvider
{
  private int count = 0;
  private bool isChanged;

  public AutoRefreshConfigurationProvider() : base()
  {
    Timer timer = new Timer(TimerCallback);
    timer.Change(1000, 3000);
  }

  public override void Load()
  {
    var beforeData = Data;
    // 這里采用硬編碼指定option的路徑
    Data = new Dictionary<string, string>() { { "AutoRefreshOptions:IncreasementCount", count.ToString() } };
    isChanged = IsDictionaryChanged(beforeData, Data);
  }

  private void TimerCallback(object state)
  {
    count++;
    this.Load();
    if (isChanged)
    {
      base.OnReload();//通知IConfiguration實例, 有參數發生了改變
      isChanged = false;
    }
  }
  //判斷兩個Idictionary是否有不同的幫助方法
  private static bool IsDictionaryChanged(IDictionary<string, string> before, IDictionary<string, string> after)
  {
    if (before == null && after == null)
    {
      return false;
    }
    if ((before == null) != (after == null))
    {
      return true;
    }
    if (before.Count != after.Count)
    {
      return true;
    }
    var ignoreCaseBefore = new Dictionary<string, string>(before, StringComparer.OrdinalIgnoreCase);
    foreach (var afterItemKey in after.Keys)
    {
      if (!ignoreCaseBefore.TryGetValue(afterItemKey, out var beforeItemValue))
      {
        return true;
      }
      if (beforeItemValue != after[afterItemKey])
      {
        return true;
      }
      ignoreCaseBefore.Remove(afterItemKey);
    }
    if (ignoreCaseBefore.Count > 0)
    {
      return true;
    }
    return false;
  }
}

實現擴展方法

public static class AutoRereshConfigurationExtensions
{
  public static IConfigurationBuilder AddAutoRereshConfiguration(this IConfigurationBuilder builder)
  {
    return builder.Add(new AutoRefreshConfigurationSource());
  }
}

使用方法

新建一個WebApi項目, 在Program.CreateWebHostBuilder中增加黃色部分

WebHost.CreateDefaultBuilder(args)
  .ConfigureAppConfiguration(config =>
  {
    config.AddAutoRereshConfiguration();
  })
  .UseStartup<Startup>();

在Startup. ConfigureServices中配置

services.Configure<RefreshableOptions>(Configuration.GetSection("AutoRefreshOptions"));

修改ValuesController

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
  private RefreshableOptions refreshableOptions;
  public ValuesController(IOptionsSnapshot<RefreshableOptions> refreshableOptions)
  {
    this.refreshableOptions = refreshableOptions.Value;
  }

  [HttpGet]
  public ActionResult<IEnumerable<string>> Get()
  {
    return new string[] { "value1", "value2", refreshableOptions.IncreasementCount.ToString() };
  }
}

啟動后不停的刷新http://localhost:5000/api/values可以看到返回內容的變化

本文代碼

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品一区二区三区在线观看 | 久久久久久高清 | 一区三区在线观看 | 成人在线不卡 | 国产片av在线永久免费观看 | 日韩精品毛片免费看 | 高清18麻豆| 在线播放亚洲 | 九九热视频精品在线观看 | 亚洲成熟少妇视频在线观看 | 久久久久国产 | 一级黄色毛片 | av在线视| 久久福利电影 | 久久久亚洲 | www.99精品 | 日本亚洲最大的色成网站www | 在线永久免费观看日韩a | 日韩三级av在线 | 久久精品久久久久电影 | 老丁头电影在线观看 | 中文字幕乱码一区二区三区 | 91高清视频 | 精品国产91久久 | 国产成人精品一区二区三区四区 | 久久久久精 | 亚洲 欧美 另类 综合 偷拍 | 久久国产精品久久精品 | 欧美一区在线视频 | 色二区 | 久久久国产精品入口麻豆 | 亚洲精品日韩在线 | 亚洲激情在线播放 | 中日韩黄色大片 | 国产成人免费在线 | 久久国产亚洲精品 | 欧美日韩一区二区视频在线观看 | 在线观看成人 | 一级电影免费看 | 中文字幕日产乱码六区小草 | 国产一区二区在线免费观看 |