asp.net core源码飘香:Configuration组件
簡(jiǎn)介:
這是一個(gè)基礎(chǔ)組件,是一個(gè)統(tǒng)一的配置模型,配置可以來(lái)源于配置文件(json文件,xml文件,ini文件),內(nèi)存對(duì)象,命令行參數(shù),系統(tǒng)的環(huán)境變量又或者是你自己擴(kuò)展的配置源,該組件將各個(gè)配置源的數(shù)據(jù)按統(tǒng)一的格式(IDictionary<string, string> Data)進(jìn)行加載,進(jìn)而對(duì)外提供調(diào)用接口。
?????? 不僅如此,有些配置源(如文件配置源)還可以在配置源的數(shù)據(jù)發(fā)生變化時(shí)進(jìn)行重新加載(IDictionary<string, string> Data),而程序員隨時(shí)可以判斷是否已經(jīng)重新加載或注冊(cè)回調(diào),在重新加載配置時(shí)添加業(yè)務(wù)邏輯。
????? 讓我們先從一個(gè)問(wèn)題切入源碼:不同格式的配置源(如json數(shù)據(jù))是怎樣轉(zhuǎn)成IDictionary<string, string> Data的,層級(jí)關(guān)系丟了么?
?????????
????? 可以看到,層級(jí)關(guān)系在轉(zhuǎn)化為字典的key時(shí)使用冒號(hào)(:)分隔,如果子節(jié)點(diǎn)是一個(gè)數(shù)組,中間還會(huì)使用數(shù)組項(xiàng)的索引進(jìn)行分隔(見(jiàn)上圖:Configuration["wizards:0:Name"]),有了這種分隔模式,任何數(shù)據(jù)源就都可以轉(zhuǎn)為IDictionary<string, string>對(duì)象了。
?????
模型:
??????配置組件的模型由如下幾個(gè)核心對(duì)象組成:
???????1.ConfigurationBuilder??????? //編程入口,負(fù)責(zé)收集配置源(配置文件,命令行參數(shù),內(nèi)存對(duì)象等)及將收集到的配置源Build(調(diào)用各個(gè)配置源ConfigurationSource的Build方法)成一個(gè)配置提供器???? ???????????????????????????????????????????????? (IConfigurationProvider)的集合傳入ConfigurationRoot對(duì)象,通過(guò)該對(duì)象完成對(duì)不同數(shù)據(jù)源進(jìn)行數(shù)據(jù)Load的過(guò)程。
?????? 2.IConfigurationSource????? //不同的配置源各自實(shí)現(xiàn)這個(gè)接口,主要為上面的Build過(guò)程提供IConfigurationProvider對(duì)象。
?????? 3.IConfigurationProvider??? //具體實(shí)現(xiàn)配置數(shù)據(jù)Load的地方,以及在數(shù)據(jù)源發(fā)生變化時(shí)重新加載數(shù)據(jù)及發(fā)出Change通知的地方。
?????? 4.ConfigurationRoot????????? //用戶(hù)直接使用的配置對(duì)象,里面管理著IConfigurationProvider對(duì)象的集合,Get和Set操作即由此對(duì)象調(diào)用各IConfigurationProvider完成。
?????? 5.ConfigurationSection???? //配置子節(jié)點(diǎn)的操作對(duì)象
?
源碼說(shuō)事:
?????1.一個(gè)json文件是怎樣變成一個(gè)字典對(duì)象為我們提供配置服務(wù)的?
????????
????????
????????
????????
????????
????????
????????
????????
????????
????????
????????
????????
????????
????????
????????
??
總結(jié):
?????配置組件的源碼比較簡(jiǎn)單,但實(shí)現(xiàn)的功能確很強(qiáng)大。里面的設(shè)計(jì)思路和實(shí)現(xiàn)手法都令人贊嘆不已。asp.net core的系列框架源碼都是這樣,實(shí)現(xiàn)手法有如少林七十二絕技,每一個(gè)框架都驚艷江湖!
相關(guān)文章:?
asp.net core源碼飄香:從Hosting開(kāi)始
原文地址:http://www.cnblogs.com/shiliyuanma/p/6682437.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的asp.net core源码飘香:Configuration组件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
                            
                        - 上一篇: 如何在多个项目中分离Asp.Net Co
 - 下一篇: 青客宝团队redis内部分享ppt