CSDN|基于选项模式实现.NET Core的配置热更新
本文插图
作者 | 秦元培
头图 | CSDN 下载自东方 IC 最近在面试的时候 , 遇到了一个关于 .NET Core 配置热更新的问题 , 顾名思义 , 就是在应用程序的配置发生变化时 , 如何在不重启应用的情况下使用当前配置 。 从 .NET Framework 一路走来 , 对于 Web.Config 以及 App.Config 这两个配置文件 , 我们应该是非常熟悉了 , 通常情况下 ,IIS 会检测这两个配置文件的变化 , 并自动完成配置的加载 , 可以说它天然支持热更新 , 可当我们的视野伸向分布式环境的时候 , 这种配置方式就变得繁琐起来 , 因为你需要修改一个又一个配置文件 , 更不用说这些配置文件可能都是放在容器内部 。 而有经验的朋友 , 可能会想到 , 利用 Redis 的发布-订阅来实现配置的下发 , 这的确是一个非常好的思路 。 总而言之 , 我们希望应用可以随时感知配置的变化 , 所以 , 在今天这篇博客里 , 我们来一起聊聊 .NET Core 中配置热更新相关的话题 , 这里特指全新的选项模式(Options) 。
在 .NET Core 中 , 选项模式(Options)使用类来对一组配置信息进行强类型访问 , 因为按照接口分隔原则(ISP)和关注点分离这两个工程原则 , 应用的不同部件的配置应该是各自独立的 , 这意味着每一个用于访问配置信息的类 , 应该是只依赖它所需要的配置信息的 。 举一个简单的例子 , 虽然 Redis 和 MySQL 都属于数据持久化层的设施 , 但是两者属于不同类型的部件 , 它们拥有属于各自的配置信息 , 而这两套配置信息应该是相互独立的 , 即 MySQL 不会因为 Redis 的配置存在问题而停止工作 。 此时 , 选项模式(Options)推荐使用两个不同的类来访问各自的配置 。 我们从下面这个例子开始:{
"Learning": {
"Years": 5,
"Topic": [ "Hotfix", ".NET Core", "Options" ],
"Skill": [
{
"Lang": "C#",
"Score": 3.9
},
{
"Lang": "Python",
"Score": 2.6
},
{
"Lang": "JavaScript",
"Score": 2.8
}
]
}
}
此时 , 如果希望访问Learning节点下的信息 , 我们有很多种实现方式:
//方式1
var learningSection = Configuration.GetSection("Learning");
var careerYears = learningSection.GetValue<decimal>("Years");
var topicHotfix = learningSection.GetValue<string>("Topic:0");
//方式2
var careerYears = Configuration["Learning:Years"];
var topicHotfix = Configuration["Learning:Topic:0");
[Serializable]
public class LearningOptions
{
public decimal Years { get; set; }
public List<string> Topic { get; set; }
public List<SkillItem> Skill { get; set; }
}
[Serializable]
public class SkillItem
{
public string Lang { get; set; }
public decimal? Score { get; set; }
}
同样地 , 茴香的茴字有几种写法 , 你可知道?
//写法1:手动绑定
var leaningOptions = new LearningOptions;
Configuration.GetSection("Learning").Bind(leaningOptions);
推荐阅读
- |“增长”成娱乐营销必考题,酷营销-CBD模型为最佳选项?
- 苹果笔记本|苹果首款基于自研ARM处理器的MacBook Pro发布 同样采用M1芯片
- |基于Android 11:OPPO Ace2迎ColorOS 11正式版升级
- ColorOS|基于安卓11的ColorOS 11正式版面向Ace2系列推送
- CSDN|小霸王被申请破产重整;虎牙员工自曝被HR抬出公司;Office 2010被微软终止服务|极客头条
- |Kornia开源可微分计算机视觉库,基于Pytorch
- CSDN|可以“作为医生”的 GPT-3,究竟是炒作还是名副其实?
- |再加码社区团购,滴滴的野心从来不止于出行
- CSDN|对话指令集创始人兼CEO潘爱民:面向未来的新型物联网操作系统 | 人物志
- CSDN|给 JDK 报了一个P4 的 Bug,结果居然……