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的系列框架源碼都是這樣,實現手法有如少林七十二絕技,每一個框架都驚艷江湖!

     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM