zoukankan      html  css  js  c++  java
  • 跟我一起学.NetCore之自定义配置源-热更新-对象绑定

    前言

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

    配置源回顾:

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

    正文

    自定义配置源

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

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

      img

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

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

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

    • MyConfigurationProvider

      img

    • MyConfigurationSource

      img

    • ConfigurationBuilderExtend(非必须)

      img

    • 像之前一样使用

      img

    • 运行看效果

      img

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

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

    img

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

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

    img

    img

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

    img

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

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

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

    img

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

    img

    绑定逻辑:

    img

    运行查看:

    img

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

    img

    总结

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

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

  • 相关阅读:
    JavaScript入门篇 编程练习
    JavaScript入门篇 第三天(认识DOM)
    JavaScript入门篇 第二天(消息对话框+网页弹出)
    JavaScript入门篇 第一天
    网页布局基础 第四次
    本内容中发现无效字符。处理资源 'file:///C:/Users/XDJ/Desktop/1111/press.xml' 时出错。第 5 行,位置: 11 <author>ƽ
    jquery中的each用法以及js中的each方法实现实例
    jQuery获取页面及个元素高度、宽度
    js正则函数match、exec、test、search、replace、split使用介绍集合
    javascript中window.open()与window.location.href的区别
  • 原文地址:https://www.cnblogs.com/zoe-zyq/p/13516742.html
Copyright © 2011-2022 走看看