ASP.NET Core - 配置系統之配置添加

来源:https://www.cnblogs.com/wewant/archive/2023/03/06/17110740.html
-Advertisement-
Play Games

2. 配置添加 配置系統可以讀取到配置文件中的信息,那必然有某個地方可以將配置文件添加到配置系統中。之前的文章中講到 ASP.NET Core 入口文件中,builder(WebApplicationBuilder 對象) 中有一個 Configuration 屬性,這裡就是我們擴展添加額外的配置的 ...


2. 配置添加

配置系統可以讀取到配置文件中的信息,那必然有某個地方可以將配置文件添加到配置系統中。之前的文章中講到 ASP.NET Core 入口文件中,builder(WebApplicationBuilder 對象) 中有一個 Configuration 屬性,這裡就是我們擴展添加額外的配置的地方。

查看 Configuration 屬性,可以看到是 ConfigurationManager 類型,而 ConfigurationManager 實現了 IConfigurationBuilder 介面。

image

image

IConfigurationBuilder 介面定義如下:

public interface IConfigurationBuilder{
    // 存放用於該 Builder 的 Sources 列表中各個元素的共用字典
    IDictionary<string, object> Properties { get; }
    // 已註冊的 IConfigurationSource 列表
    IList<IConfigurationSource> Sources { get; }
    // 將 IConfigurationSource 添加到 Sources 中
    IConfigurationBuilder Add(IConfigurationSource source);
	// 通過 Sources 構建配置提供程式實例,並創建 IConfigurationRoot 實例
	IConfigurationRoot Build();
}

而它的實現類 ConfigurationBuilder 就是配置系統的入口。

public class ConfigurationBuilder : IConfigurationBuilder
{
    public IList<IConfigurationSource> Sources { get; } = new List<IConfigurationSource>();

    public IDictionary<string, object> Properties { get; } = new Dictionary<string, object>();

    public IConfigurationBuilder Add(IConfigurationSource source)
    {
        if (source == null)
        {
            throw new ArgumentNullException(nameof(source));
        }

        Sources.Add(source);
        return this;
    }

    public IConfigurationRoot Build()
    {
        var providers = new List<IConfigurationProvider>();
        foreach (IConfigurationSource source in Sources)
        {
            IConfigurationProvider provider = source.Build(this);
            providers.Add(provider);
        }
        return new ConfigurationRoot(providers);
    }
}

當我們啟動一個 ASP.NET Core應用的時候是創建並啟動了一個Web主機,由 Web 主機來啟動並管理我們的應用的生命周期,在這個過程中會預設添加一些配置提供程式,載入一些配置信息。這些操作就在以下代碼中:

var builder = WebApplication.CreateBuilder(args);

.NET Core 框架下的主機除了適用於 Web 應用的 Web 主機之外,還有通用主機。若是在普通的控制台應用程式,想要通過主機啟動應用,並使用配置系統可用以下方式:

(1) 添加 Microsoft.Extensions.Hosting Nuget 包
(2) 通過以下代碼創建主機

using IHost host = Host.CreateDefaultBuilder(args).Build();
host.Run();

主機這塊就先稍微瞭解以下,後面還會有專門的文章去介紹。除了通過主機的方式使用配置系統之外,我們也可以直接通過 ConfigurationBuilder 類構建,如下:

IConfiguration config = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json")
    .Build();

config.GetValue<string>("Logging:LogLevel:Default");

這裡需要引入相應的Nuget包,例如使用 ConfigurationBinder 相關的擴展方法就要引入 Microsoft.Extensions.Configuration.Binder Nuget包,使用 Json 格式配置文件就要引入Microsoft.Extensions.Configuration.Json Nuget包,該Nuget 包中包含 AddJsonFile 擴展方法,通過指定文件路徑添加相應的配置文件到配置系統中。

配置文件多種多樣,比較常用的都有 Json 、xml、ini、yaml 等多種,甚至配置信息不一定存儲在文件之中。.NET Core配置系統對各種來源的配置信息進行了抽象,不同來源只要提供相應的配置提供程式即可,也就是我們上面在 IConfigurationRoot 介面中看到的 IConfigurationProvider 介面的實現類。配置提供程式內部對不同來源不同格式的配置信息進行載入、刷新,並提供統一的訪問方式,也就是鍵值對,實際上所有的配置信息最終會以鍵值對的方式被讀取到記憶體中的Dictionary對象中。

我們要添加不同類型不同來源的配置信息,只需要通過 IConfigurationBuilder 實現類對象添加不同的配置提供程式即可。在ASP.NET Core 應用之中,可以通過以下方式進行添加:

// 添加一個xml配置文件,並加入到配置系統中
var configirationFilePath = Path.Combine(Directory.GetCurrentDirectory(), "xxx.xml");
builder.Configuration.AddXmlFile(configirationFilePath);

也可以通過以下方式:

builder.WebHost.ConfigureAppConfiguration(builder =>
{
    builder.AddXmlFile("");
});

這兩種方式是一樣的效果的,只不過具體的實現類不同,ConfigureAppConfiguration 可以將原有的配置提供程式情況,而 builder.Configuration 則不行,只能往集合後面繼續添加。



參考文章:

ASP.NET Core 中的配置 | Microsoft Learn
配置 - .NET | Microsoft Learn
理解ASP.NET Core - 配置(Configuration)



ASP.NET Core 系列:
目錄:ASP.NET Core 系列總結
上一篇:ASP.NET Core - 配置系統之配置讀取


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 概述 canal是阿裡巴巴旗下的一款開源項目,純Java開發。基於資料庫增量日誌解析,提供增量數據訂閱&消費,目前主要支持了MySQL(也支持mariaDB)。 背景 早期,阿裡巴巴B2B公司因為存在杭州和美國雙機房部署,存在跨機房同步的業務需求。不過早期的資料庫同步業務,主要是基於trigger的 ...
  • CF1149E Election Promises 這個題目最難下手的地方在於:可以對相鄰的城市進行任意修改,這導致難以確定後繼狀態。 但是還是可以使用 $\operatorname{SG}$ 函數! 下麵設 $f_u = \operatorname{mex}{f_v}$,這個可以直接拓撲排序求。 ...
  • 容器介面 BeanFactory 是ApplicationContext的父介面,所有ApplicationContext的實現都組合了BeanFactory。 BeanFactory才是Spring的核心容器。 從BeanFactory提供的方法來看,主要是從容器中獲取Bean。實際上控制反轉,依 ...
  • slava是作者參與的一個github開源項目,該項目的目標是用Go語言構建一個高性能K-V雲資料庫。 在本文中,作者將介紹Slava中記憶體淘汰策略的實現。Slava中目前實現了四種記憶體淘汰策略,分別是maxMemoryLruAllKeys,maxMemoryLfuAllKeys,maxMemory ...
  • 很難預測Python,C ++,Swift或任何其他編程語言是否會取代Java作為最受歡迎的語言,但在不久的將來不太可能.以下是一些原因: 受歡迎程度並建立的用法:Java已經存在了25年以上,並且擁有大型且已建立的用戶群.它被廣泛用於企業軟體開發,Android應用程式開發以及許多其他領域,這使得 ...
  • 前言 最近才發現MAUI Blazor Android存在輸入框軟鍵盤遮擋這個問題,搜索了一番,原來這是安卓webview一個由來已久的問題,還好有大佬提出瞭解決方案 AndroidBug5497Workaround,但是這是Java代碼,MAUI中需要做一些小的修改,修改一些方法名還有類的明確引用 ...
  • 《C#與.NET6 開發從入門到實踐》正式出版,歡迎廣大網友前來圍觀!! 遙想我的上一篇文章,已經過去將近3年,期間斷更的主要原因就是忙於書稿編寫,也擔心博客和書稿可能出現一些意外衝突。現在,書已經正式出版,我又開始更新博客了。 這是我第一次受出版社邀請寫書,沒有經驗,中間經歷了許多意外,導致預定為 ...
  • 背景 公司里的某負責保存用戶文檔的子系統有時會忽然cpu很高,過了大約5分鐘後又恢復正常水平。領導協調讓我幫看一下 (我心裡是: 不熟悉這個子系統裡面的代碼,我儘力哈😓) 其實確實是這樣的,如果熟悉出問題的系統的代碼,會對診斷問題起到很大的幫助,否則就需要更多的利用對底層的理解了。 分析 打聽後知 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...