国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

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

來源:懂視網 責編:小采 時間:2020-11-27 22:34:39
文檔

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

Asp.net core中實現自動更新的Option的方法示例:Asp.net core可以監視json、xml等配置文件的變化, 自動刷新內存中的配置內容, 但如果想每隔1秒從zookeeper、consul獲取最新的配置信息, 需要自己實現. 閱讀了 Asp.net core Document的Custom configuration provider, 得知只需
推薦度:
導讀Asp.net core中實現自動更新的Option的方法示例:Asp.net core可以監視json、xml等配置文件的變化, 自動刷新內存中的配置內容, 但如果想每隔1秒從zookeeper、consul獲取最新的配置信息, 需要自己實現. 閱讀了 Asp.net core Document的Custom configuration provider, 得知只需

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可以看到返回內容的變化

本文代碼

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

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

Asp.net core中實現自動更新的Option的方法示例:Asp.net core可以監視json、xml等配置文件的變化, 自動刷新內存中的配置內容, 但如果想每隔1秒從zookeeper、consul獲取最新的配置信息, 需要自己實現. 閱讀了 Asp.net core Document的Custom configuration provider, 得知只需
推薦度:
標簽: 自動刷新 as core
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国内一级野外a一级毛片 | 日韩三级网址 | 久久国产精品最新一区 | 久久久网久久久久合久久久久 | 九九国产精品九九 | 日韩www视频 | 国产精品久久久久久永久牛牛 | 国产精品久久久久久永久牛牛 | 亚洲日韩欧美视频 | 一区二区免费播放 | 亚洲视频一区二区三区 | 最新国产精品视频免费看 | 免费国产黄网站在线观看视频 | 久久国产欧美日韩高清专区 | 99视频九九精品视频在线观看 | 欧美第一页在线观看 | zozozo欧美人禽交另类视频 | 天天爱夜夜操 | 欧美亚洲国产日韩一区二区三区 | 九草伊人| 亚洲成人国产 | 国产成人久久综合二区 | 亚洲国产一成人久久精品 | 免费黄毛片 | 国产精品亚洲一区二区三区在线播放 | 国产99视频在线观看 | 日韩欧美一区二区三区在线视频 | 欧美激情网址 | 国产午夜小视频 | 伊人精品在线视频 | 欧美日韩中文字幕在线 | 99久久国产综合精品成人影院 | 欧美在线一区二区三区 | 午夜黄色在线观看 | 国产精品特级毛片一区二区三区 | 亚洲一级毛片免观看 | 国产精选在线视频 | 纯毛片| 欧美日韩亚洲高清不卡一区二区三区 | 久久久不卡国产精品一区二区 | 国产精品一区欧美日韩制服 |