自定义变量 配置文件_跟我一起学.NetCore之自定义配置源热更新对象绑定
前言
上一篇针对不同的配置源进行举例演示,感受到不同配置源和不同数据格式使用统一操作的便捷(即没有什么加一层解决不了的,这个不是我说的),这里接着说说自定义配置源、配置热更新、配置绑定对象相关操作;
配置源回顾:
命令行
环境变量
文件(Json、ini、Xml)
正文
自定义配置源
可能会有疑问,内置的配置源那么多,还不够用吗?只能这么说,需求各种各样,说不一定有一些定制需求 ;就像如今微服务时代,针对于每个服务各自解析配置信息,显得就不那么合适了,所以就会有一个配置中心的存在,而这里的配置中心就是一个配置源,如果要想像使用本地配置源一样,就得自定义;来,先看步骤:
实现IConfigrationProvider,通常会直接继承ConfiguratioProvider抽象类,此类已经实现了IConfigrationProvider;
实现IConfigurationSource,提供自定义的IConfigrationProvider;
针对IConfigurationBuilder增加扩展方法,目的是不暴露自定义配置源代码,同时使用也方便;
走起,开撸,这里还是以控制台的程序进行演示:
MyConfigurationProvider
MyConfigurationSource
ConfigurationBuilderExtend(非必须)
像之前一样使用
运行看效果
简单吧,是不是秒会,那就对了,就可以继续下一个知识点;通常对于配置来说,肯定有要去改配置的需求,就好比之前的Asp.Net的Web.Config配置文件,会根据需求进行配置修改,但是,要重启项目才能使用,由此,热更新就显得更有用武之地了,即项目不需要重启,配置文件修改后,项目后续能获取到修改之后的数据;接下来以文件配置源的形式简单举例演示:
创建一个控制台项目,这里用Json文件做配置源演示:
运行,默认热更新是没开启的,所以改文件,多次获取的值是都是旧值,
修改配置文件内容---这里修改的是exe执行程序所在目录的配置文件,如果用的是绝对目录的话,修改项目目录下的配置文件即可:
那如何开启呢?在指定配置源的时候打开对应的属性即可:
增加了两个属性,其实热更新的属性打开reloadOnChange就行了:
optional: 默认为false,意思就是没有对应配置文件时报错,如果设置为true,不会报错,读取到的值为空;
reloadOnChange: 默认为false,意思就是没打开热更新,设置为true,当文件变化时就会重新加载新值;
运行结果,这次修改文件就可以读取到最新的值了:
热更新其实就是个属性的开关,使用就是简单,接下来简单举例演示一下对象绑定吧,即将配置文件中的值绑定为一个对象,业务中使用的不太多,因为有些不愿意单独再写一个类来做绑定,但封装服务的时候有的喜欢绑定为对象进行配置值的获取;
绑定逻辑:
运行查看:
数据成功绑定到了对象上,但默认情况下,私有属性是绑定不成功的,但可以打开开关哦,如下:
总结
这里说明下,配置源的加载是有顺序的,后添加的配置会覆盖先添加的配置;这篇就先说这么多吧,相对简单点,本来想把变更监听内容在这一块说说的,但想着可能会导致篇幅长,所以留到下次再说吧,专门针对配置数据变更监听过程及监听处理~~~
一直想把Demo的代码开源到github上,但想了想,前面几个Demo就不提交了,动动手敲敲,绝对没坏处(哈哈哈哈,别光看,表面会了,一写就掉坑);后面的Demo相对复杂点,会开源到github上~~~~
自定义变量 配置文件_跟我一起学.NetCore之自定义配置源热更新对象绑定相关推荐
- 跟我一起学.NetCore之自定义配置源-热更新-对象绑定
前言 上一篇针对不同的配置源进行举例演示,感受到不同配置源和不同数据格式使用统一操作的便捷(即没有什么加一层解决不了的,这个不是我说的),这里接着说说自定义配置源.配置热更新.配置绑定对象相关操作: ...
- 自定义变量 配置文件_「系统架构」Nginx调优之变量的使用(3)
在上一篇文章「系统架构」Nginx调优之变量的使用(2)中我们介绍了自定义变量和内置变量,下面我们继续接着介绍Nginx中变量的可见性和动态内置变量. 变量的可见性 nginx中的变量虽然不全是全局变 ...
- python自定义变量名有哪些_Python学习第161课——自定义变量和导出变量
我们之前介绍过,Linux系统的命令相当于一个变量,这个变量是保存在系统的环境变量里面的. 我们在shell中输入env并回车,就会显示出系统的所有环境变量,如下图: 如上图所示,我们在环境变量中可以 ...
- jwt 长度_跟我一起学.NetCore之WebApi接口裸奔有风险(Jwt)
前言 撸码需谨慎,裸奔有风险.经常在一些技术交流群中了解到,还有很多小伙伴的项目中Api接口没有做任何安全机制验证,直接就裸奔了,对于一些临时项目或是个人小项目还好,其余的话,建议小伙伴们酌情考虑都加 ...
- 安卓自定义音量键_手机跟我学第十四课——如何调节手机音量
银 / 发 / 学 /堂 手机跟我学 如何调节手机音量 各位同学们,大家好,我是小银班长 随着科技的发展,手机已经越来越离不开咱们的日常生活.但是咱们中老年人吧,不像年轻人学的那么快,有些东西总是弄不 ...
- this.$modal.confirm 自定义按钮关闭_【勤哲资料】7.6 自定义打印
自定义打印 通常情况下,我们填报了一份表单,若想打印的话,直接利用Excel本身的打印功能就可以了,但是在某些情况下,Excel的打印功能就不能完全满足我们的需要了,例如: 套打 把合计行作为页尾,每 ...
- java 微信自定义菜单开发_微信公众号开发之设置自定义菜单实例代码【java版】...
本实例是为了实现在管理后台实现微信菜单的添加删除管理. 1.首先我们需要新建一个数据库表用于存放menu菜单项 可包含的字段有id.父类id.name.排序.是否显示.类型(view.click).链 ...
- java自定义jsp标签_深入浅出javaWeb实战第17讲自定义JSP标签(上)
<JavaWeb开发>课程计划表 Web的概念及其演变 课程内容: ? Web的概念.特点 ? HTTP协议简介 ? Web技术的发展:静态文档,Web应用,Web服务 JavaWeb应用 ...
- ps自定义形状工具_【福利】3000款PS自定义形状免费打包下载
PS形状介绍 获取方式见文末 ps自定义形状素材包包含例如:品牌标志Logo.动物形状,花卉形状,圆圈形状,边框形状,人物形状,海洋生物形状,南瓜形状,万圣节形状,扑克牌形状等等.合计3000款!如果 ...
最新文章
- 简书 java jvm_JVM介绍
- 刚从阿里、头条面试回来,尚硅谷java数据结构与算法百度云
- 1.DBCP和CP30的区别
- SSH,telnet终端中文显示乱码解决办法
- mysql下count(*)和count(1)的区别
- CentOS系统提示用户名不在sudoers文件中
- python爬虫基础(一)~爬虫概念和架构
- 第三十三讲:tapestry Ajax eventlink无刷新页面
- 【纯技术贴】.NETStandard FreeSql v0.0.9 功能预览
- Flask笔记-使用flask-sqlacodegen自动生成model
- (zt)说说大型高并发高负载网站的系统架构
- (转) mp4编码全介绍 (一)
- 设置层级为2html,前端知识(Css)汇总2
- 阶段1 语言基础+高级_1-2 -面向对象和封装_1面向对象思想的概述
- 洛谷 P2920 [USACO08NOV]时间管理Time Management
- 贪吃蛇html游戏代码
- Android软件图标分辨率,android app icon 图标大小尺寸
- 解决nginx error!The page is temporarily unavailable.
- ICON源码复现(Implicit Clothed humans Obtained from Normals)
- 什么是工业大数据?工业大数据的价值体现在哪些方面?
热门文章
- Ubuntu8.04 LTS Hardy下的常用命令
- 初识WAP开发时..
- PHP 利用PHPExcel到处数据到Excel;还有导出数据乱码的解决方案。
- Django后端彻底解决跨域问题
- MySQL 5.6 解决InnoDB: Error: Table “mysql“.“innodb_table_stats“ not found.问题
- C#中try catch中throw ex和throw方式抛出异常有何不同
- Javascript是否通过引用传递?
- 如何使用ui-router中的ui-sref将参数传递给控制器
- git从master转到开发分支
- 为所有服务器端代码调用ConfigureAwait的最佳实践