前言

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

配置源回顾:

  • 命令行

  • 环境变量

  • 文件(Json、ini、Xml)

正文

自定义配置源

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

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

  2. 实现IConfigurationSource,提供自定义的IConfigrationProvider;

  3. 针对IConfigurationBuilder增加扩展方法,目的是不暴露自定义配置源代码,同时使用也方便;

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

  • MyConfigurationProvider

  • MyConfigurationSource

  • ConfigurationBuilderExtend(非必须)

  • 像之前一样使用

  • 运行看效果

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

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

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

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

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

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

  • optional: 默认为false,意思就是没有对应配置文件时报错,如果设置为true,不会报错,读取到的值为空;

  • reloadOnChange: 默认为false,意思就是没打开热更新,设置为true,当文件变化时就会重新加载新值;

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

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

绑定逻辑:

运行查看:

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

总结

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

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

自定义变量 配置文件_跟我一起学.NetCore之自定义配置源热更新对象绑定相关推荐

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

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

  2. 自定义变量 配置文件_「系统架构」Nginx调优之变量的使用(3)

    在上一篇文章「系统架构」Nginx调优之变量的使用(2)中我们介绍了自定义变量和内置变量,下面我们继续接着介绍Nginx中变量的可见性和动态内置变量. 变量的可见性 nginx中的变量虽然不全是全局变 ...

  3. python自定义变量名有哪些_Python学习第161课——自定义变量和导出变量

    我们之前介绍过,Linux系统的命令相当于一个变量,这个变量是保存在系统的环境变量里面的. 我们在shell中输入env并回车,就会显示出系统的所有环境变量,如下图: 如上图所示,我们在环境变量中可以 ...

  4. jwt 长度_跟我一起学.NetCore之WebApi接口裸奔有风险(Jwt)

    前言 撸码需谨慎,裸奔有风险.经常在一些技术交流群中了解到,还有很多小伙伴的项目中Api接口没有做任何安全机制验证,直接就裸奔了,对于一些临时项目或是个人小项目还好,其余的话,建议小伙伴们酌情考虑都加 ...

  5. 安卓自定义音量键_手机跟我学第十四课——如何调节手机音量

    银 / 发 / 学 /堂 手机跟我学 如何调节手机音量 各位同学们,大家好,我是小银班长 随着科技的发展,手机已经越来越离不开咱们的日常生活.但是咱们中老年人吧,不像年轻人学的那么快,有些东西总是弄不 ...

  6. this.$modal.confirm 自定义按钮关闭_【勤哲资料】7.6 自定义打印

    自定义打印 通常情况下,我们填报了一份表单,若想打印的话,直接利用Excel本身的打印功能就可以了,但是在某些情况下,Excel的打印功能就不能完全满足我们的需要了,例如: 套打 把合计行作为页尾,每 ...

  7. java 微信自定义菜单开发_微信公众号开发之设置自定义菜单实例代码【java版】...

    本实例是为了实现在管理后台实现微信菜单的添加删除管理. 1.首先我们需要新建一个数据库表用于存放menu菜单项 可包含的字段有id.父类id.name.排序.是否显示.类型(view.click).链 ...

  8. java自定义jsp标签_深入浅出javaWeb实战第17讲自定义JSP标签(上)

    <JavaWeb开发>课程计划表 Web的概念及其演变 课程内容: ? Web的概念.特点 ? HTTP协议简介 ? Web技术的发展:静态文档,Web应用,Web服务 JavaWeb应用 ...

  9. ps自定义形状工具_【福利】3000款PS自定义形状免费打包下载

    PS形状介绍 获取方式见文末 ps自定义形状素材包包含例如:品牌标志Logo.动物形状,花卉形状,圆圈形状,边框形状,人物形状,海洋生物形状,南瓜形状,万圣节形状,扑克牌形状等等.合计3000款!如果 ...

最新文章

  1. 简书 java jvm_JVM介绍
  2. 刚从阿里、头条面试回来,尚硅谷java数据结构与算法百度云
  3. 1.DBCP和CP30的区别
  4. SSH,telnet终端中文显示乱码解决办法
  5. mysql下count(*)和count(1)的区别
  6. CentOS系统提示用户名不在sudoers文件中
  7. python爬虫基础(一)~爬虫概念和架构
  8. 第三十三讲:tapestry Ajax eventlink无刷新页面
  9. 【纯技术贴】.NETStandard FreeSql v0.0.9 功能预览
  10. Flask笔记-使用flask-sqlacodegen自动生成model
  11. (zt)说说大型高并发高负载网站的系统架构
  12. (转) mp4编码全介绍 (一)
  13. 设置层级为2html,前端知识(Css)汇总2
  14. 阶段1 语言基础+高级_1-2 -面向对象和封装_1面向对象思想的概述
  15. 洛谷 P2920 [USACO08NOV]时间管理Time Management
  16. 贪吃蛇html游戏代码
  17. Android软件图标分辨率,android app icon 图标大小尺寸
  18. 解决nginx error!The page is temporarily unavailable.
  19. ICON源码复现(Implicit Clothed humans Obtained from Normals)
  20. 什么是工业大数据?工业大数据的价值体现在哪些方面?

热门文章

  1. Ubuntu8.04 LTS Hardy下的常用命令
  2. 初识WAP开发时..
  3. PHP 利用PHPExcel到处数据到Excel;还有导出数据乱码的解决方案。
  4. Django后端彻底解决跨域问题
  5. MySQL 5.6 解决InnoDB: Error: Table “mysql“.“innodb_table_stats“ not found.问题
  6. C#中try catch中throw ex和throw方式抛出异常有何不同
  7. Javascript是否通过引用传递?
  8. 如何使用ui-router中的ui-sref将参数传递给控制器
  9. git从master转到开发分支
  10. 为所有服务器端代码调用ConfigureAwait的最佳实践