<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答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
        主站蜘蛛池模板: 69式国产真人免费视频 | 成年女人喷潮毛片免费播放| 国产aⅴ无码专区亚洲av麻豆 | 精品免费国产一区二区三区| 亚洲妇女无套内射精| 成人免费无码视频在线网站| 亚洲中文字幕久久精品无码喷水| 日韩在线一区二区三区免费视频| 台湾一级毛片永久免费| 亚洲伊人久久精品影院| 日本三级在线观看免费| 亚洲av伊人久久综合密臀性色| 亚洲国产精品18久久久久久| 国产区卡一卡二卡三乱码免费| 国产精品亚洲专区一区| 精品国产亚洲男女在线线电影| 亚洲aⅴ无码专区在线观看| 国产成人涩涩涩视频在线观看免费| 亚洲黄色免费在线观看| ww在线观视频免费观看w| 国产av无码专区亚洲av果冻传媒| 久久九九AV免费精品| 亚洲国色天香视频| 无人在线观看免费高清| 亚洲一级高清在线中文字幕| 久久大香伊焦在人线免费| 亚洲综合久久成人69| 8x网站免费入口在线观看| 国产成+人+综合+亚洲专| 亚洲成AⅤ人影院在线观看| 在线观看肉片AV网站免费| 亚洲国产精品一区二区三区在线观看| 国产又黄又爽又猛的免费视频播放 | 亚洲AV无码一区二区三区网址 | 成人性生交视频免费观看| 亚洲专区一路线二| 四虎影视www四虎免费| 中文字幕乱理片免费完整的| 日本片免费观看一区二区| 91亚洲自偷手机在线观看| 大地资源在线观看免费高清|