asp.net core源码飘香:Configuration组件

简介:

  这是一个基础组件,是一个统一的配置模型,配置可以来源于配置文件(json文件,xml文件,ini文件),内存对象,命令行参数,系统的环境变量又或者是你自己扩展的配置源,该组件将各个配置源的数据按统一的格式(IDictionary<string, string> Data)进行加载,进而对外提供调用接口。

       不仅如此,有些配置源(如文件配置源)还可以在配置源的数据发生变化时进行重新加载(IDictionary<string, string> Data),而程序员随时可以判断是否已经重新加载或注册回调,在重新加载配置时添加业务逻辑。

      让我们先从一个问题切入源码:不同格式的配置源(如json数据)是怎样转成IDictionary<string, string> Data的,层级关系丢了么?

         

      可以看到,层级关系在转化为字典的key时使用冒号(:)分隔,如果子节点是一个数组,中间还会使用数组项的索引进行分隔(见上图:Configuration["wizards:0:Name"]),有了这种分隔模式,任何数据源就都可以转为IDictionary<string, string>对象了。

     

模型:

      配置组件的模型由如下几个核心对象组成:

       1.ConfigurationBuilder        //编程入口,负责收集配置源(配置文件,命令行参数,内存对象等)及将收集到的配置源Build(调用各个配置源ConfigurationSource的Build方法)成一个配置提供器                                                          (IConfigurationProvider)的集合传入ConfigurationRoot对象,通过该对象完成对不同数据源进行数据Load的过程。

       2.IConfigurationSource      //不同的配置源各自实现这个接口,主要为上面的Build过程提供IConfigurationProvider对象。

       3.IConfigurationProvider    //具体实现配置数据Load的地方,以及在数据源发生变化时重新加载数据及发出Change通知的地方。

       4.ConfigurationRoot          //用户直接使用的配置对象,里面管理着IConfigurationProvider对象的集合,Get和Set操作即由此对象调用各IConfigurationProvider完成。

       5.ConfigurationSection     //配置子节点的操作对象

 

源码说事:

     1.一个json文件是怎样变成一个字典对象为我们提供配置服务的?

        

        

        

        

        

        

        

        

        

        

        

        

        

        

        

  

总结:

     配置组件的源码比较简单,但实现的功能确很强大。里面的设计思路和实现手法都令人赞叹不已。asp.net core的系列框架源码都是这样,实现手法有如少林七十二绝技,每一个框架都惊艳江湖!

相关文章: 

  • asp.net core源码飘香:从Hosting开始

原文地址:http://www.cnblogs.com/shiliyuanma/p/6682437.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机图形橡皮筋实验报告,弹性或橡皮筋技术

橡皮筋是一种在计算机屏幕上绘制线, 折线, 矩形, 圆形和椭圆形等几何图元的流行技术。它已成为图形用户界面(GUI)不可或缺的一部分, 并成为事实上的标准, 并且几乎被所有基于Windows的应用程序普遍接受。用户通过定位其两个端点以通常的方式指定该线。当我们从第一个端点移动到…

2017蓝桥杯省赛---java---C---9(青蛙跳杯子)

题目描述 题目描述 X星球的流行宠物是青蛙&#xff0c;一般有两种颜色&#xff1a;白色和黑色。X星球的居民喜欢把它们放在一排茶杯里&#xff0c;这样可以观察它们跳来跳去。如下图&#xff0c;有一排杯子&#xff0c;左边的一个是空着的&#xff0c;右边的杯子&#xff0c;每…

青客宝团队redis内部分享ppt

Redis&#xff1a;最好的缓存数据库 说Redis是缓存服务&#xff0c;估计有些人会不开心&#xff0c;因为Redis也可以把数据库持久化&#xff0c;但是在大多数情况Redis的竞争力是提供缓存服务。说到缓存服务必然会想到Memcached&#xff0c;因为几年前Memcached是最流行的缓存服…

你知道面试官是如何刷人的吗

转载自 你知道面试官是如何刷人的吗 对于一个公司来说&#xff0c;执行招聘面试事宜是一个耗时耗钱的项目&#xff0c;从顾问公司和人才中介挑选出合适的简历之后&#xff0c;还要花更多的时间找出合适的候选人。有的时候这些机构会向你保证这些人都是 Java 天才、SQL 专家、…

2020蓝桥杯省赛---java---A---4(七段码)

题目描述 思路分析 代码实现 package lanqiao;public class Main {public static int N10;public static int e[][]new int[N][N];//存储二极管相邻的信息public static int f[]new int[N];//并查集public static int ans0;public static boolean st[]new boolean[N];//true表…

小米无线路由器服务器用户名和密码忘了,小米路由器管理密码忘记了怎么办?...

问&#xff1a;小米路由器管理密码忘记了怎么办&#xff1f;我想修改小米路由器上的配置&#xff0c;在打开miwifi.com的时候&#xff0c;提示需要输入管理密码。但是&#xff0c;我不知道管理密码是多少&#xff0c;忘记了管理密码应该怎么办&#xff1f;答&#xff1a;首先说…

asp.net core源码飘香:Options组件

简介&#xff1a; Options组件是一个小组件&#xff0c;但用的地方很多。它本质是将一个POCO类注册到容器中&#xff08;主要在Startup中作为其他组件的配置功能提供&#xff09;&#xff0c;后续使用的时候就可以通过比如构造函数注入等获取到POCO对象。如果只是为了注入一个P…

DevOps面试问题

转载自 DevOps面试问题 DevOps是一组过程、方法与系统的统称&#xff0c;用于促进开发&#xff08;应用程序/软件工程&#xff09;、技术运营和质量保障&#xff08;QA&#xff09;部门之间的沟通、协作与整合。下面为大家分享DevOps系列的面试问题 持续整合问题 问题一&a…

微软发布ReactXP:方便开发者构建跨平台应用

说起跨平台开发工具&#xff0c;开发者们最先想到的无外乎是 Cordova 和 Xamarin。但是前者无法提供足够令人满意的性能表现&#xff0c;而后者在 Web 开发上心有余而力不足。所以&#xff0c;微软 Skype 团队基于 React JS 和 React Native 开发了一款全新的跨平台开发工具 —…

2020蓝桥杯省赛---java---A---10( 字串排序)

题目描述 思路分析 set去重 代码实现 package lanqiao;import java.util.*; public class Main {public static Set<String> setnew TreeSet<>();public static void main(String[] args) {Scanner scanner new Scanner(System.in);while (scanner.hasNextLine…

这些面试中的智力题,你都会了吗

转载自 这些面试中的智力题&#xff0c;你都会了吗 1. 给一个瞎子52张扑克牌&#xff0c;并告诉他里面恰好有10张牌是正面朝上的。要求这个瞎子把牌分成两堆&#xff0c;使得每堆牌里正面朝上的牌的张数一样多。瞎子应该怎么做&#xff1f; 2. 如何用一枚硬币等概率地产生一…

服务器登陆显示其他用户,连接远程服务器显示其他用户

连接远程服务器显示其他用户 内容精选换一换云服务器网络异常、防火墙未放行本地远程桌面端口、云服务器CPU负载过高等场景均可能导致云服务器无法正常登录。本节操作介绍无法登录Linux弹性云服务器的排查思路。当您的云服务器无法远程登录时&#xff0c;我们建议您首先检查是否…

2019蓝桥杯省赛---java---A---4(迷宫)

题目描述 【问题描述】 下图给出了一个迷宫的平面图&#xff0c;其中标记为 1 的为障碍&#xff0c;标记为 0 的为可以通行的地方。 010000 000100 001001 110000 迷宫的入口为左上角&#xff0c;出口为右下角&#xff0c;在迷宫中&#xff0c;只能从一个位置走到这个它的上、…

面试官最爱问的并发问题

转载自 面试官最爱问的并发问题 在Java相关的岗位面试中&#xff0c;很多面试官都喜欢考察面试者对Java并发的了解程度&#xff0c;而以volatile关键字作为一个小的切入点&#xff0c;往往可以一问到底&#xff0c;把Java内存模型&#xff08;JMM&#xff09;&#xff0c;Jav…

西瓜显示服务器错误,西瓜云服务器

西瓜云服务器 内容精选换一换云服务器组是对云服务器的一种逻辑划分&#xff0c;云服务器组中的弹性云服务器遵从同一策略。当前仅支持反亲和性&#xff0c;即同一云服务器组中的弹性云服务器分散地创建在不同的主机上&#xff0c;提高业务的可靠性。您可以使用云服务器组将业务…

30分钟掌握 C#6

1. 只读自动属性&#xff08;Read-only auto-properties&#xff09; C# 6之前我们构建只读自动属性&#xff1a; public string FirstName { get; private set; } public string LastName { get; private set; } 原理解析&#xff1a;就是编译器在生成set访问器时&#xff0c…

2019蓝桥杯省赛---java---A---6(完全二叉树的权值)

题目描述 思路分析 等差数列 代码实现 package lanqiao;import java.util.*; public class Main {public static void main(final String[] args) {Scanner sc new Scanner(System.in);int nsc.nextInt();int[]numsnew int[n1];long maxSum0;int minDeepInteger.MAX_VALUE;…

如何让面试官认可你的简历

转载自 如何让面试官认可你的简历 在之前的博客里写了很多面试技巧&#xff0c;这是有个前提&#xff1a; 至少候选人被面试了&#xff01; 在这个前提下&#xff0c;候选人哪怕失败了&#xff0c;至少也能用实战来检验和校对面试准备的结果&#xff0c;用句比较时髦的话来…

服务器c盘有个inetpub文件夹,老司机为你示范win10系统C盘inetpub文件夹删不掉的图文教程...

也许大家在用电脑工作的使用中会遇到win10系统C盘inetpub文件夹删不掉的情况&#xff0c;目前就有很多朋友向我资讯关于win10系统C盘inetpub文件夹删不掉的具体处理步骤。小编把总结的关于win10系统C盘inetpub文件夹删不掉的方法了教给大家&#xff0c;只用你按照  1、右键点…

体验VS2017的Live Unit Testing

相对于传统的Unit Test,VS2017 带来了一个新的功能,叫Live Unit Testing,从字面意思理解就是实时单元测试,在实际的使用中,这个功能就是可以在编写代码的时候进行实时的background的单元测试. 在体验之前,有几点注意事项是需要了解的: 1.目前 live unit tesing仅仅支持 C#和V…