標籤:iii aac 地址 change load elf base icon 命令列
簡介:
這是一個基礎組件,是一個統一的配置模型,配置可以來源於設定檔(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的系列架構源碼都是這樣,實現手法有如少林七十二絕技,每一個架構都驚豔江湖!
相關文章:
原文地址:http://www.cnblogs.com/shiliyuanma/p/6682437.html
asp.net core源碼飄香:Configuration組件(轉)