日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

跟我一起学.NetCore之配置初体验

發布時間:2023/12/4 asp.net 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 跟我一起学.NetCore之配置初体验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

????配置對于程序來說,絕對是必不可少,畢竟配置是應用或組件動態適應各種環境的最優方案,沒有之一(我還年輕,我是這么認為的);之前可能用的最多的配置源是命令行、文件(XML、Json、INI),Web中對于Asp.Net程序員Web.Config是接觸的再多不過了,不管怎樣,讀取配置信息是避免不了啦,但是對于各種配置源不同及格式不同,又得專門開發對應的配置解析程序;不慌,.NetCore內置的配置框架為此一解煩惱,開箱即用,正文詳解,走起~~~

正文

????體驗之前,簡單聊聊有關配置的幾個核心類型及其對應的聯系;

  • IConfiguration:暴露給我們使用的配置對象,其實是底層將不同數據結構的原始數據提取,并進行封裝成一個具有樹形化層次結構的IConfiguration對象;根節點和其他配置節點都繼承IConfiguration;

    namespace Microsoft.Extensions.Configuration {public interface IConfiguration{// 索引訪問????string?this[string?key]?{?get;?set;?}// 指定Key獲取 配置節點????????IConfigurationSection?GetSection(string?key);//?配置子節點??????????IEnumerable<IConfigurationSection>?GetChildren();//?用于配置變化通知使用????????IChangeToken GetReloadToken();} }

????????? IConfigurationRoot:根節點,配置的根;

namespace Microsoft.Extensions.Configuration {public interface IConfigurationRoot : IConfiguration{//?對配置數據的重新加載,因為是根,所以會重新加載全部數據void?Reload();//?用于不同配置源獲取獲取數據IEnumerable<IConfigurationProvider> Providers { get; }} }

?? IConfigurationSection:其他配置節點,可以理解為子節點;

namespace Microsoft.Extensions.Configuration {public interface IConfigurationSection : IConfiguration{//?數據指定Key值string?Key?{?get;?}//?邏輯樹的路徑,層次用冒號:隔開,如SectionA:SectionBstring?Path?{?get;?}//?承載的配置數據string Value { get; set; }} }

關系圖如下:

  • IConfigurationProvider:真正讀取原始配置的數據,并將其轉換成一個中間字典的結構,最后再封裝成IConfiguration;

    namespace Microsoft.Extensions.Configuration {public interface IConfigurationProvider{?? // 獲取指定Key的值bool TryGet(string key, out string value);// 設置對應Key值void Set(string key, string value);IChangeToken GetReloadToken();// 加載配置數據void?Load();//?獲取指定配置節點所有子節點KeyIEnumerable<string> GetChildKeys(IEnumerable<string> earlierKeys, string parentPath);} }
  • IConfigurationSource:原始配置源的體現,每種配置源都會有一個實現該接口的實現類,由于真正讀取配置數據是委托IConfigurationProvider對象進行讀取的,所以IConfigurationSource的作用就是為了提供IConfigurationProvider對象;

    namespace Microsoft.Extensions.Configuration {public interface IConfigurationSource{//?提供對應的?IConfigurationProvider對象IConfigurationProvider Build(IConfigurationBuilder builder);} }
  • IConfigurationBuilder:將IConfigurationSource配置源注冊進行,通過調用其Build方法構造出IConfiguration;

    namespace Microsoft.Extensions.Configuration {public interface IConfigurationBuilder{IDictionary<string,?object>?Properties?{?get;?}// 保存所有注冊進來的 配置源????????IList<IConfigurationSource>?Sources?{?get;?}// 注冊配置源????????IConfigurationBuilder?Add(IConfigurationSource?source);//?構造出一個Root對象,然后通過root對象就能獲取p,并獲取對應上面的值????????IConfigurationRoot Build();} }

? ?核心對象關系總結:

  • IConfigurationProvider真正讀取配置數據,并將其封裝為中間字典;

  • 同的配置源IConfigurationSource提供對應的IConfigurationProvider對象;

  • 通過IConfigurationBuilder將不同的IConfigurationSource配置源進行注冊,并創建出對應的IConfiguration對象;

  • 通過創建的IConfiguration對象就可以獲取指定節點的值;

  • ????核心類型及其關系就簡單說這么多,接下來對不同配置源進行使用體驗一把,接下來用一個控制臺程序進行演示,老規矩,先通過Nuget安裝核心包:

    ????開始擼代碼:

    • 內存配置源

    ?????運行結果:

    • 命令行配置源

      命令行支持的格式:

      A. 無前綴的 key=value模式

      B. 雙中橫線模式?--key=value或 --key?value

      C. 正斜杠模式?/key=value或 /key value

      開擼:

      增加命令行擴展包:

      模擬命令行傳參,兩種方式:

      項目屬性里面配置

    ????????直接在launchSettings.json中配置

    ????? ?代碼? ?

    ????????運行結果

    • 文件配置源

      通過Nuget安裝對應文件類型的包,如下

      準備xml、json、ini三個配置源不同的文件

      代碼應用

      運行,正常獲取值

    • 環境變量配置源

    ???????在之前,估計想不到合適的應用場景將環境變量作為配置源,對不對,如果有,那應該不多;但是現如今docker的存在,讓其變得常用,因為畢竟容器的隔離使得環境變量可以針對對應的容器進行配置;

    ????通過Nuget安裝包

    ????

    ????模擬環境變量配置

    ????代碼走起

    ????運行結果

    ???

    總結

    ????這里先寫到這吧,太晚了(明天整理一下發出),這里大概說了幾個關鍵類型的作用及關系,然后針對不同配置源進行舉例演示,用法基本上都是這樣,是不是很簡單;下次咱們聊聊熱更新;

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的跟我一起学.NetCore之配置初体验的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。