阅读1003 返回首页    go 技术社区[云栖]


.NET Core???????????????????????????[8]: ???????????????????????????????????????-??????-????????????-?????????

??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????.NET Core??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????JSON????????????????????????JsonConfigurationSource???????????????????????????????????????Microsoft.Extensions.Configuration.Json?????????NuGet??????????????????????????????project.json????????????????????????????????????????????????NuGet???????????????[ ????????????????????????ASP.NET Core?????????????????????]

   1: {
   2:   ...
   3:   "dependencies": {
   4:     ...    
   5:     "Microsoft.Extensions.Configuration.Json": "1.0.0"
   6:   }
   7: }

????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????JSON?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????MinThreads ???MaxThreads????????????????????????????????????????????????????????????????????????ThreadPoolOptions????????????Options?????????

   1: public class ThreadPoolOptions
   2: {
   3:     public int MinThreads { get; set; }
   4:     public int MaxThreads { get; set; }
   5:?? 
   6:     public override string ToString()
   7:     {
   8:         return $"Thread pool size: [{MinThreads}, {MaxThreads}]";
   9:     }
  10: }

????????????????????????????????????threadPool.json??????????????????????????????????????????????????????????????????????????????project.json????????????????????????????????????????????????????????????????????????????????????????????????bin????????????????????????????????????????????????????????????????????????????????????????????????builtOptions/copyToOutput????????????????????????????????????

   1: {
   2:   ...
   3:   "buildOptions": {
   4:     ...
   5:     "copyToOutput": "threadPool.json"
   6:   }
   7: }

???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ConfigurationBuilder???????????????????????????????????????JsonConfigurationSource??????????????????JsonConfigurationSource????????????????????????????????????????????????threadPool.json?????????????????????????????????????????????????????????True????????????????????????ReloadOnChange?????????????????????????????????????????????????????????????????????????????????????????????????????????

   1: IConfiguration config = new ConfigurationBuilder()
   2:     .Add(new JsonConfigurationSource {Path = "threadPool.json", ReloadOnChange = true })
   3:     .Build();
   4:?? 
   5: Action changeCallBack = () => {
   6:     ThreadPoolOptions options = new ServiceCollection()
   7:         .AddOptions()
   8:         .Configure<ThreadPoolOptions>(config)
   9:         .BuildServiceProvider()
  10:         .GetService<IOptions<ThreadPoolOptions>>()
  11:         .Value;
  12:     Console.WriteLine(options);
  13: };
  14:?? 
  15: ChangeToken.OnChange(()=>config.GetReloadToken(), changeCallBack);
  16:?? 
  17: Random random = new Random();
  18: while (true)
  19: {
  20:     ThreadPoolOptions options = new ThreadPoolOptions
  21:     {
  22:         MinThreads = random.Next(10, 20),
  23:         MaxThreads = random.Next(40, 50)
  24:     };
  25:     File.WriteAllText(Path.Combine(AppContext.BaseDirectory, "threadPool.json"), JsonConvert.SerializeObject(options));
  26:     Task.Delay(5000).Wait();
  27: }

?????????ConfigurationBuilder??????Configuration?????????????????????????????????GetReloadToken??????????????????ChangeToken??????????????????????????????????????????????????????????????????????????????ChangeToken?????????????????????OnChange?????????ChangeToken???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Options?????????????????????????????????ThreadPoolOptions?????????????????????????????????????????????????????????

????????????????????????????????????????????????????????????5??????????????????threadPool.json?????????????????????????????????????????????????????????????????????????????????threadPool.json?????????????????????????????????Configuration??????????????????????????????Configuration???????????????????????????????????????GetReloadToken????????????ChangeToken?????????HasChanged???????????????True?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????S04???

image


??????????????????
??????????????????????????????A
?????????www.weibo.com/artech
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????

最后更新:2017-10-25 11:05:58

  上一篇:go  .NET Core采用的全新配置系统[7]: 将配置保存在数据库中
  下一篇:go  .NET Core采用的全新配置系统[9]: 为什么针对XML的支持不够好?如何改进?