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