php网站开发专业是做什么的,公司商标注册怎么弄,哪家网站设计公司好,公司标志设计图片大全免费经过前面三篇关于.NET Core Configuration的文章之后#xff0c;本篇文章主要讨论如何扩展一个Configuration组件出来。如果前面三篇文章没有看到#xff0c;可以点击如下地址访问.NET Core 3.0之深入源码理解Configuration(一).NET Core 3.0之深入源码理解Configuration(二)… 经过前面三篇关于.NET Core Configuration的文章之后本篇文章主要讨论如何扩展一个Configuration组件出来。如果前面三篇文章没有看到可以点击如下地址访问.NET Core 3.0之深入源码理解Configuration(一).NET Core 3.0之深入源码理解Configuration(二).NET Core 3.0之深入源码理解Configuration(三)了解了Configuration的源码后再去扩展一个组件就会比较简单接下来我们将在.NET Core 3.0-preview5的基础上创建一个基于Consul的配置组件。相信大家对Consul已经比较了解了很多项目都会使用Consul作为配置中心此处也不做其他阐述了主要是讲一下创建Consul配置扩展的一些思路。使用Consul配置功能时我们可以将信息转成JSON格式后再存储那么我们在读取的时候在体验上就像是从读取JSON文件中读取一样。初始化Consul假设你已经安装并启动了Consul我们打开Key/Value功能界面创建两组配置选项出来分别是commonservice和userservice如下图所示配置值采用JSON格式实现思路我们知道在Configuration整个的设计框架里比较重要的类ConfigurationRoot内部又有一个IConfigurationProvider集合属性也就是说我们追加IConfigurationProvider实例最终也会被放到到该集合中如下图所示该项目中我使用到了一个已经封装好的Consul(V0.7.2.6)类库同时基于.NET Core关于Configuration的设计风格做如下的框架设计考虑到我会在该组件内部创建ConsulClient实例所以对ConsulClient构造函数的一部分参数做了抽象提取并添加到了IConsulConfigurationSource中以增强该组件的灵活性。之前说过Consul中的配置信息是以JSON格式存储的所以此处使用到了Microsoft.Extensions.Configuration.Json.JsonConfigurationFileParser用以将JSON格式的信息转换为Configuration的通用格式Key/Value。IConsulConfigurationSourceConsulConfigurationSource该类提供了一个构造函数用于接收ServiceKey和CancellationToken实例其build()方法也比较简单主要是初始化ConsulConfigurationParser实例ConsulConfigurationParser该类比较复杂主要实现Consul配置的获取、监控以及容错处理公共方法源码如下另外关于Consul的监控主要利用了QueryResult.LastIndex属性该类缓存了该属性的值并与实获取的值进行比较以判断是否需要重新加载内存中的缓存配置ConsulConfigurationProvider该类除了实现Load方法外还会根据ReloadOnChange属性在构造函数中注册OnChange事件用于重新加载配置信息源码如下此处调用在Program中实现运行结果如下图所示我们已经加载到了两个ConsulProvider实例这与我们在Program中添加的两个Consul配置一致其中所加载到的值也和.NET Core Configuration的Key/Value风格相一致所加载到的值也会Consul中所存储的相一致基于源码扩展一个配置组件出来还是比较简单的另外需要说明的是该组件关于JSON的处理主要基于.NET Core原生组件位于命名空间内的System.Text.Json中所以该组件无法在.NET Core 3.0之前的版本中运行需要引入额外的JSON组件辅助处理。源码已经托管于GitHub地址https://github.com/littlehorse8/Navyblue.Extensions.Configuration.Consul记得点个小星星哦原文地址https://www.cnblogs.com/edison0621/p/10922281.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com