.NET Core中的配置系統

傳統配置方式

  • 文件Web.config 進行配置。
  • ConfigurationManager類配置。

.NET配置系統中支持配置方式

  • 文件配置(json、xml、ini等)
  • 注冊表
  • 環境變量
  • 命令行
  • 自定義配置源

Json文件配置方式

實現步驟:

  1. 創建一個json文件,把文件設置 為“如果較新則復制”,這樣編譯后的文件會復制一份到bin目錄下。
    1. {"name": "wangxiaohua","exclude": ["**/bin","**/bower_components","**/jspm_packages","**/node_modules","**/obj","**/platforms"],"proxy":{"key": "value","age": 88}
      }

  2. Nuget安裝
    1. Microsoft.Extensions.Configuration 配置框架基礎包
    2. Microsoft.Extensions.Configuration.Json 讀取json配置文件包
  3. 編寫代碼讀取配置。
    namespace ConsoleApp1
    {internal class Program{static void Main(string[] args){//創建配置構造器ConfigurationBuilder builder = new ConfigurationBuilder();//添加需要被讀取的json文件,//optional參數是文件不存在是否報錯//reloadOnChange配置文件被更新時是否重新加載配置文件builder.AddJsonFile("config.json", optional: true, reloadOnChange: true);//獲得配置層級的根層級IConfigurationRoot confRoot = builder.Build();string name = confRoot["name"];Console.WriteLine($"name={name}");string value =confRoot.GetSection("proxy:key").Value;Console.WriteLine($"value={value}");Console.ReadKey();}}
    }

    對象映射方式讀取json文件

? ? ? ? 例如:

? ? ? ? 將配置內容映射成對象

{
“name”:"wangwu",
"age":99,
"proxy":{"address":"192.168.0.1","port":"80"}}

創建一個類文件,屬性和配置文件中key相對應

 //把整個配置文件映射成一個對象
class Config { public string Name { get; set; }public int Age { get; set; }public Proxy Proxy { get; set; }}//將proxy中的內容映射成一個類class Proxy { public string Address { get; set; }public string Port { get; set; }}

讀取映射類,讀取之前需要先安裝NuGet包:Microsoft.Extensions.Configuration.Binder

namespace ConsoleApp1
{internal class Program{static void Main(string[] args){//創建配置構造器ConfigurationBuilder builder = new ConfigurationBuilder();//添加需要被讀取的json文件,//optional參數是文件不存在是否報錯//reloadOnChange配置文件被更新時是否重新加載配置文件builder.AddJsonFile("config.json", optional: true, reloadOnChange: true);//獲得配置層級的根層級IConfigurationRoot confRoot = builder.Build();Config config =confRoot.Get<Config>();//獲取配置文件中name的值Console.WriteLine(config.Name);//獲取配置文件中port的值Console.WriteLine(config.Proxy.port)//讀取指定對象Porxy  porxy =confRoot.GetSection("porxy").Get<Porxy>();}}
}

使用選項方式讀取配置文件(推薦)

首先需要安裝Nuget包:

Microsoft.Extensions.Configuration

Microsoft.Extensions.Configuration.Json

Microsoft.Extensions.Configuration.Binder

Microsoft.Extensions.Options

然后再讀取配置文件時候,需要使用到DI注入IOptions<T>、IOptionsMonitor<T>、IOptionsSnapshot<T>類型。

IOptions<T>不會讀取到更新的值

IOptionsSnapshot<T> 在一定的范圍內讀取的是原來的值

IOptionsMonitor<T> 立即讀取到更新值

創建一個類文件:在這個文件中注入IOptionsSnapshot<T> 接口

 class OptionsConfig
{//聲明IOptionsSnapshot private readonly IOptionsSnapshot<Config> options;//使用構造方法方式進行注入public OptionsConfig(IOptionsSnapshot<Config> options) { this.options = options;}public void Test() {Config config =options.Value;Console.WriteLine(config.Name);}}

在使用讀取配置文件

    static void Main(string[] args){//創建DI容器對象ServiceCollection services = new ServiceCollection();//將OptionsConfig類注冊到容器對象中services.AddScoped<OptionsConfig>();//創建配置構造器ConfigurationBuilder builder = new ConfigurationBuilder();//添加需要被讀取的json文件,//optional參數是文件不存在是否報錯//reloadOnChange配置文件被更新時是否重新加載配置文件builder.AddJsonFile("config.json", optional: true, reloadOnChange: true);//獲得配置層級的根層級IConfigurationRoot confRoot = builder.Build();//添加選項所需的服務,把文件和節點進行綁定// services.AddOptions().Configure<Config>(e=>confRoot.GetSection("proxy").Bind(e));//使用Bind 需要安裝 Microsoft.Extensions.Configuration.Binder 包IServiceCollection serviceCollection = services.AddOptions().Configure<Config>(e=>confRoot.Bind(e));using (var sp =services.BuildServiceProvider()) {OptionsConfig config = sp.GetRequiredService<OptionsConfig>();config.Test();}Console.ReadKey();}

命令行方式進行配置:

需要安裝包:Microsoft.Extensions.Configuration.CommandLine

    static void Main(string[] args){//創建DI容器對象ServiceCollection services = new ServiceCollection();//將OptionsConfig類注冊到容器對象中services.AddScoped<OptionsConfig>();//創建配置構造器ConfigurationBuilder builder = new ConfigurationBuilder();//---------------把原來添加讀取JSON文件更換成命令行------------------builder.AddCommandLine(args); //----------------------------------//獲得配置層級的根層級IConfigurationRoot confRoot = builder.Build();//添加選項所需的服務,把文件和節點進行綁定// services.AddOptions().Configure<Config>(e=>confRoot.GetSection("proxy").Bind(e));//使用Bind 需要安裝 Microsoft.Extensions.Configuration.Binder 包IServiceCollection serviceCollection = services.AddOptions().Configure<Config>(e=>confRoot.Bind(e));using (var sp =services.BuildServiceProvider()) {OptionsConfig config = sp.GetRequiredService<OptionsConfig>();config.Test();}Console.ReadKey();}

使用時候就是在cmd窗口中使用,應用程序加參數方式。

調試時可以直接在IDE進行傳遞參數:

在項目上右鍵鼠標選擇“屬性”

在選擇“調試” --》“啟動配置文件”

直接在命令行參數中填寫需要傳遞的參數

參數的扁平化配置(扁平就是把每個參數都展開)

如果在命令行中傳遞的不是簡單是鍵值對,是比較復雜的對象或數組

對象屬性傳參格式:

? ? ? 類名:屬性名=值

對象的數組傳參格式:

? ? ? ? 類名:屬性名:數組下標 = 值

 class Proxy { public string Address { get; set; }public string Port { get; set; }public int[] Ids {get;set;}}

比如上面的模型類是一個對象,對象中還有數組,在命令行中就需要使用到扁平化傳參數。

傳遞參數應該是:

環境變量讀取參數配置

1.首先也是需要安裝Nuget包:

????????Microsoft.Extensions.Configuration.EnvironmentVariables

2.然后調用環境變量參數函數:configurationBuilder.AddEnvironmentVariables(),這個函數有無參數和有參數prefix參數重載版本。建議調用prefix版本(帶前綴區別環境變量),加載參數時候會忽略prefix參數不會和系統配置環境變量沖突。

    static void Main(string[] args){//創建DI容器對象ServiceCollection services = new ServiceCollection();//將OptionsConfig類注冊到容器對象中services.AddScoped<OptionsConfig>();//創建配置構造器ConfigurationBuilder builder = new ConfigurationBuilder();//---------------把原來添加讀取JSON文件更換成環境變量配置方式------------------//----------------------------環境變量配置方式-------------------------------builder.AddEnvironmentVariables();//----------------------------------//獲得配置層級的根層級IConfigurationRoot confRoot = builder.Build();//添加選項所需的服務,把文件和節點進行綁定// services.AddOptions().Configure<Config>(e=>confRoot.GetSection("proxy").Bind(e));//使用Bind 需要安裝 Microsoft.Extensions.Configuration.Binder 包IServiceCollection serviceCollection = services.AddOptions().Configure<Config>(e=>confRoot.Bind(e));using (var sp =services.BuildServiceProvider()) {OptionsConfig config = sp.GetRequiredService<OptionsConfig>();config.Test();}Console.ReadKey();}

3.設置環境變量鍵值對:

ide調試參數配置:

部署環境,需要在 ”我的電腦” --》屬性--》高級--》環境變量中進行配置

開發自定義配置步驟

1.自己開發類需要實現IConfigurationProvider接口

? ? ? ?實現 IConfigurationProvider的類有?ConfigurationProvider 和FileConfigurationProvider,重寫Load方法,把數據扁平化設置到Data屬性中即可。

2.在開發一個實現IConfigurationSource接口的類。讀取文件可以繼承類 FileConfigurationSource在重寫Build方法中返回上面的ConfigurationProvider對象。

3.然后把ConfigurationSource對象加入到IConfigurationBuilder中 ,configurationBuilder.Add(new ConfigurationSource())

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90792.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90792.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90792.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

kafka的消費者負載均衡機制

Kafka 的消費者負載均衡機制是保證消息高效消費的核心設計&#xff0c;通過將分區合理分配給消費者組內的消費者&#xff0c;實現并行處理和負載均衡。以下從核心概念、分配策略、重平衡機制等方面詳細講解。一、核心概念理解消費者負載均衡前&#xff0c;需明確三個關鍵概念&a…

騰訊云edges on部署pages

騰訊云edges on部署pages適用場景部署方式官方文檔 適用場景 Next.js Hexo 以及用React Vue等現代前端框架構建的單頁應用全棧項目開發 通過Pages Function KV等能力 實現輕量化的動態服務快速部署與迭代 通過Github等代碼管理平臺集成 每次代碼提交時自動構建和部署網站 注…

SpringAI入門及淺實踐,實戰 Spring? AI 調用大模型、提示詞工程、對話記憶、Adv?isor 的使用

上一次寫AI學習筆記已經好久之前了&#xff0c;溫習溫習&#xff0c;這一章講講關于Spring? AI 調用大模型、對話記憶、Adv?isor、結構化輸出、自定義對話記憶?、Prompt 模板的相關知識點。 快速跳轉到你感興趣的地方一、提示詞工程&#xff08;Prompt&#xff09;1. 基本概…

對抗攻擊-知識點

文章目錄自然圖像往往靠近機器學習分類器學習到的決策邊界&#xff08;decision boundaries&#xff09;。正交方向--改變某一個不影響其它的特征降采樣&#xff08;Feature Downsampling&#xff09;通過黑盒攻擊的持續挑戰&#xff0c;我們才能構建真正安全可靠的智能系統DCT…

7.26 作業

一、實驗要求及其拓撲圖&#xff1a; 本次實驗拓撲圖&#xff1a; 二、實驗IP地址劃分&#xff1a; 1. 公網地址&#xff08;R5 作為 ISP&#xff0c;使用公網地址&#xff09;&#xff1a; R1 與 R5 之間接口&#xff1a;15.1.1.0/24&#xff0c;R1 側為 15.1.1…

Kafka運維實戰 14 - kafka消費者組消費進度(Lag)深入理解【實戰】

目錄什么是消費者 Lag舉例說明&#xff1a;Lag 的意義&#xff1a;Lag 監控和查詢kafka-consumer-groups基本語法常用命令示例1. 查看單個消費者組的詳細信息&#xff08;最常用&#xff09;2. 列出所有消費者組&#xff08;只顯示名稱&#xff09;3. 列出所有消費者組&#xf…

設計模式(十三)結構型:代理模式詳解

設計模式&#xff08;十三&#xff09;結構型&#xff1a;代理模式詳解代理模式&#xff08;Proxy Pattern&#xff09;是 GoF 23 種設計模式中的結構型模式之一&#xff0c;其核心價值在于為其他對象提供一種間接訪問的機制&#xff0c;以控制對原始對象的訪問。它通過引入一個…

24點數學游戲(窮舉法求解表達式)

摘要本畢業設計旨在利用MATLAB技術實現一個24點數學游戲&#xff0c;采用窮舉法求解所有可能的表達式組合。通過全排列數字、枚舉運算符及括號位置&#xff0c;結合遞歸回溯算法&#xff0c;系統能夠高效地搜索所有可能的運算路徑&#xff0c;并驗證結果是否為24。實驗結果表明…

【web應用】如何進行前后端調試Debug? + 前端JavaScript調試Debug?

文章目錄一、前后端&#xff1a;后端以Debug模式運行后端項目&#xff0c;打斷點二、前后端&#xff1a;前端項目在瀏覽器中調試三、單獨前端&#xff1a;前端JavaScript調試1、控制臺輸出2、網頁調試器中添加斷點3、debugger關鍵字一、前后端&#xff1a;后端以Debug模式運行后…

FreeCAD開發樓梯參數化三維模型和鋼格柵

根據樓梯標準圖集開發各種樓梯。上行左轉&#xff0c;上行右轉&#xff0c;對應的欄桿也是配套2種。樓梯總成鋼格柵標準里的跨度和承載 扁鋼尺寸&#xff0c;輕松切換和修改參數。格柵綜合本來格柵上橫桿是冷軋扭鋼筋&#xff0c;先繪制一個圓柱&#xff0c;再做一個內切正方形…

【AcWing 836題解】合并集合

AcWing 836. 合并集合 【題目描述】 在查看解析之前&#xff0c;先給自己一點時間思考哦&#xff01; 【題解】 并查集是一種用于處理集合合并與查詢問題的數據結構&#xff0c;通常支持以下兩種操作&#xff1a; Find&#xff1a;查詢一個元素所在的集合。 Union&#xff1a…

MySQL鎖機制與MVCC原理剖析

在MySQL中&#xff0c;我們使用到了它的各種類鎖&#xff1b;按照它的維度&#xff0c;有各種鎖 從數據庫的操作粒度有&#xff0c;表鎖&#xff0c;行鎖。從數據庫的操作的類型&#xff0c;有讀鎖和寫鎖。性能上有樂觀鎖和悲觀鎖。 在上一篇文章中的事務隔離級別&#xff0c;需…

C++學習(線程相關)

目錄 一、線程庫thread 1.使用外部函數 2. 使用類的函數 3. 添加參數 二、線程庫 mutex 1.使用lock()方法 2.try_lock()方法 三、線程庫lock_guard 四、線程庫unique_lock 1.adopt_lock 2.defer_lock() 五、線程庫call_once 六、線程庫promise & future 七、c…

EPOLLONESHOT 深度解析:Linux epoll 的單次觸發機制

EPOLLONESHOT 深度解析&#xff1a;Linux epoll 的單次觸發機制 EPOLLONESHOT 是 Linux epoll 接口中的高級事件標志&#xff0c;用于實現精確的事件單次觸發控制。以下是其全面技術解析&#xff1a; 核心設計理念 #mermaid-svg-Xg5sCLdddqmKsvKG {font-family:"trebuchet…

深入解析MongoDB分片原理與運維實踐指南

深入解析MongoDB分片原理與運維實踐指南 技術背景與應用場景 隨著互聯網業務的高速發展&#xff0c;單節點MongoDB實例在數據量和訪問并發上都面臨瓶頸。為了解決數據存儲容量受限和讀寫性能下降的問題&#xff0c;MongoDB官方提供了分片&#xff08;Sharding&#xff09;方案&…

基于Django的天氣數據可視化分析預測系統

【86-Django】基于Django的天氣數據可視化分析預測系統&#xff08;完整系統源碼開發筆記詳細部署教程&#xff09;? 目錄 一、項目簡介 二、項目界面展示 三、項目視頻展示 四、技術架構 五、核心功能模塊 六、部署教程一、項目簡介 隨著全球氣候變化和極端天氣事件的頻發&am…

怎么放大單片機輸出電流

單片機作為電子系統的控制核心&#xff0c;其 I/O 口輸出電流通常較小&#xff08;一般在 10-20mA 左右&#xff09;&#xff0c;難以直接驅動繼電器、電機、大功率 LED 等需要較大工作電流的外設。因此&#xff0c;在實際應用中需通過特定電路放大單片機輸出電流&#xff0c;實…

站長百科類網站pbootcms模板(自適應手機端)+利于SEO優化(下載)

站長百科類網站pbootcms模板(自適應手機端)利于SEO優化 模板介紹&#xff1a; PbootCMS內核開發的模板&#xff0c;該模板屬于新聞資訊、新聞博客類企業使用&#xff01; 頁面簡潔簡單&#xff0c;容易管理&#xff0c;附帶測試數據&#xff01; 模板特點&#xff1a; 1、手工書…

【Golang】Go語言函數

Go語言函數 文章目錄Go語言函數Go函數特點一、函數的基本格式定義二、匿名函數三、自執行函數四、閉包函數五、延遲調用Go函數特點 無需聲明原型支持不定 變參支持多返回值支持匿名函數和閉包函數也是一種類型&#xff0c;一個函數可以賦值給變量不支持嵌套&#xff0c;一個包…

JAVA算法練習題day2

雙指針4.移動零二刷昨天的題&#xff0c;學習了新的數據結構StringBuilder。專為頻繁字符串拼接設計的可變字符串類。(https://blog.csdn.net/m0_73941339/article/details/145651287)二刷完昨天的題目&#xff0c;做到這題腦子已經轉不動了。做雙指針&#xff0c;一般雙指針初…