跟我一起学.NetCore之自定义配置源-热更新-对象绑定

前言

上一篇针对不同的配置源进行举例演示,感受到不同配置源和不同数据格式使用统一操作的便捷(即没有什么加一层解决不了的,这个不是我说的),这里接着说说自定义配置源、配置热更新、配置绑定对象相关操作;

配置源回顾:

  • 命令行
  • 环境变量
  • 文件(Json、ini、Xml)

正文

自定义配置源

可能会有疑问,内置的配置源那么多,还不够用吗?只能这么说,需求各种各样,说不一定有一些定制需求 ;就像如今微服务时代,针对于每个服务各自解析配置信息,显得就不那么合适了,所以就会有一个配置中心的存在,而这里的配置中心就是一个配置源,如果要想像使用本地配置源一样,就得自定义;来,先看步骤:

  1. 实现IConfigrationProvider,通常会直接继承ConfiguratioProvider抽象类,此类已经实现了IConfigrationProvider;

 

跟我一起学.NetCore之自定义配置源-热更新-对象绑定

 

  1. 实现IConfigurationSource,提供自定义的IConfigrationProvider;
  2. 针对IConfigurationBuilder增加扩展方法,目的是不暴露自定义配置源代码,同时使用也方便;

走起,开撸,这里还是以控制台的程序进行演示:

  • MyConfigurationProvider

 

跟我一起学.NetCore之自定义配置源-热更新-对象绑定

 

  • MyConfigurationSource

 

跟我一起学.NetCore之自定义配置源-热更新-对象绑定

 

  • ConfigurationBuilderExtend(非必须)

 

跟我一起学.NetCore之自定义配置源-热更新-对象绑定

 

  • 像之前一样使用

 

跟我一起学.NetCore之自定义配置源-热更新-对象绑定

 

  • 运行看效果

 

跟我一起学.NetCore之自定义配置源-热更新-对象绑定

 

简单吧,是不是秒会,那就对了,就可以继续下一个知识点;通常对于配置来说,肯定有要去改配置的需求,就好比之前的http://Asp.Net的Web.Config配置文件,会根据需求进行配置修改,但是,要重启项目才能使用,由此,热更新就显得更有用武之地了,即项目不需要重启,配置文件修改后,项目后续能获取到修改之后的数据;接下来以文件配置源的形式简单举例演示:

创建一个控制台项目,这里用Json文件做配置源演示:

 

跟我一起学.NetCore之自定义配置源-热更新-对象绑定

 

运行,默认热更新是没开启的,所以改文件,多次获取的值是都是旧值,

修改配置文件内容---这里修改的是exe执行程序所在目录的配置文件,如果用的是绝对目录的话,修改项目目录下的配置文件即可:

 

跟我一起学.NetCore之自定义配置源-热更新-对象绑定

 

 

跟我一起学.NetCore之自定义配置源-热更新-对象绑定

 

那如何开启呢?在指定配置源的时候打开对应的属性即可:

 

跟我一起学.NetCore之自定义配置源-热更新-对象绑定

 

增加了两个属性,其实热更新的属性打开reloadOnChange就行了:

  • optional: 默认为false,意思就是没有对应配置文件时报错,如果设置为true,不会报错,读取到的值为空;
  • reloadOnChange: 默认为false,意思就是没打开热更新,设置为true,当文件变化时就会重新加载新值;

运行结果,这次修改文件就可以读取到最新的值了:

 

跟我一起学.NetCore之自定义配置源-热更新-对象绑定

 

热更新其实就是个属性的开关,使用就是简单,接下来简单举例演示一下对象绑定吧,即将配置文件中的值绑定为一个对象,业务中使用的不太多,因为有些不愿意单独再写一个类来做绑定,但封装服务的时候有的喜欢绑定为对象进行配置值的获取;

 

跟我一起学.NetCore之自定义配置源-热更新-对象绑定

 

绑定逻辑:

 

跟我一起学.NetCore之自定义配置源-热更新-对象绑定

 

运行查看:

 

跟我一起学.NetCore之自定义配置源-热更新-对象绑定

 

数据成功绑定到了对象上,但默认情况下,私有属性是绑定不成功的,但可以打开开关哦,如下:

 

跟我一起学.NetCore之自定义配置源-热更新-对象绑定

 

总结

这里说明下,配置源的加载是有顺序的,后添加的配置会覆盖先添加的配置;这篇就先说这么多吧,相对简单点,本来想把变更监听内容在这一块说说的,但想着可能会导致篇幅长,所以留到下次再说吧,专门针对配置数据变更监听过程及监听处理~~~

一直想把Demo的代码开源到github上,但想了想,前面几个Demo就不提交了,动动手敲敲,绝对没坏处(哈哈哈哈,别光看,表面会了,一写就掉坑);后面的Demo相对复杂点,会开源到github上~~~~

--------------------------------------------------------------------------------------

关注公众号“Code综艺圈”,一起来学习呀!!!;

跟我一起学.NetCore之自定义配置源-热更新-对象绑定