最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解.NET Core中的配置Configuration的方法

 更新時間:2025年04月25日 09:19:18   作者:貓霸  
在.NET中提供了多種配置提供程序來對不同的配置進行讀取、寫入、重載等操作,這里我們以為.NET 的源碼項目為例,來看下.NET中的配置主要是有那些類庫,感興趣的朋友一起看看吧

什么是配置

.NET中的配置,本質上就是key-value鍵值對,并且key和value都是字符串類型。

在.NET中提供了多種配置提供程序來對不同的配置進行讀取、寫入、重載等操作,這里我們以為.NET 的源碼項目為例,來看下.NET中的配置主要是有那些類庫。下面這個截圖是.NET 源碼中和配置相關的所有類庫,所有配置相關的類庫都是都是以Microsoft.Extensions.Configuration開頭的。

貌似很多,沒關系我們來簡單理解一下。

類庫名稱類庫作用
1、Microsoft.Extensions.Configuration.Abstractions定義配置相關的接口,其他所有配置類庫都必須引用這個類庫
2、Microsoft.Extensions.ConfigurationMicrosoft.Extensions.Configuration.Abstractions類庫的簡單實現(xiàn)
3、配置提供程序:Microsoft.Extensions.Configuration.CommandLine基于命令行的配置提供程序,負責對命令行的配置進行讀寫、載入、重載等操作。
4、配置提供程序:Microsoft.Extensions.Configuration.EnvironmentVariables基于環(huán)境變量的配置提供程序,負責對環(huán)境變量的配置進行讀寫、載入、重載等操作
5、配置提供程序:Microsoft.Extensions.Configuration.FileExtensions基于的文件提供程序的基類庫,文件提供程序包括基于Json文件、Ini文件、Xml文件或者自定義文件等。
6、配置提供程序:Microsoft.Extensions.Configuration.Json基于Json文件的配置提供程序程序,負責從Json文本文件中對配置讀寫、載入、重載等操作。
7、配置提供程序:Microsoft.Extensions.Configuration.Ini基于Ini文件的配置提供程序,負責從Ini文件中對配置進行讀寫、載入、重載等操作。
8、配置提供程序:Microsoft.Extensions.Configuration.UserSecrets基于UserSecrets的配置提供程序,這個本質上也是一種基于Json文件類型的配置程序。主要用于管理應用機密
9、Microsoft.Extensions.Configuration.Binder負責將key-value鍵值對的配置列表綁定到指定的C#實體類上,方便程序使用。

從上面可以看到,主要有四個類庫:第1個類庫Abstractions負責定義配置的一些接口,第2個類庫Configuration負責定義配置的簡單實現(xiàn)。第3到第8個類庫都是具體的配置提供程序,第9個類庫Binder負責將配置綁定到指定的的Model,方便程序使用。

配置提供程序,.NET中有多個類庫提供程序,每個類庫提供程序都是以單獨的類庫向外提供,基本上每個類庫就是三個文件,分別是ConfigurationExtensions.cs、ConfigurationProvider.cs和ConfigurationSource.cs,這三個類分別表示配置的擴展方法、配置提供程序和配置源。配置源用于生成配置提供程序。

在第2個類庫中,微軟幫助我們實現(xiàn)了一個基于類庫的配置提供程序,我們在列表中沒有單獨列舉這個類庫提供程序。

配置源IConfigurationSource

配置源表示一個單獨的配置集合,可以表示來自內存的配置源、來自Json文件的配置源。但是配置源不直接提供對配置的訪問操作,它只有一個接口Build,該接口一個具體的配置提供程序IConfigurationProvider ,每個配置提供程序負責對配置的讀取、寫入、載入配置、重載配置等訪問操作。

public interface IConfigurationSource
{
    IConfigurationProvider Build(IConfigurationBuilder builder);
}

配置提供程序IConfigurationProvider

配置提供程序負責實現(xiàn)配置的設置、讀取、重載等功能,并以鍵值對形式提供配置。

public interface IConfigurationProvider
{
	//讀取配置
    bool TryGet(string key, out string? value);
    //修改配置
    void Set(string key, string? value);
    //獲取重載配置的Token
    IChangeToken GetReloadToken();
    //載入配置
    void Load();
    //獲取指定父路徑下的直接子節(jié)點Key,然后 Concat(earlierKeys) 一同返回
    IEnumerable<string> GetChildKeys(IEnumerable<string> earlierKeys, string? parentPath);
}

配置構建者IConfigurationBuilder

上面的IConfigurationSource和IConfigurationProvider分別表示一種數(shù)據源和對一種數(shù)據源進行讀寫操作。但是一個程序的配置可能來自很多地方,可能一部分配置來自環(huán)境變量、一部分配置來自文件等等。這個時候IConfigurationBuilder配置構建者就誕生了,IConfigurationBuilder接口維護了多個配置源,并提供一個Build方法生成一個統(tǒng)一的配置IConfigurationRoot 來統(tǒng)一對整個程序的配置進行讀取、寫入、重載等操作。但是這里大家注意,IConfigurationRoot 對配置的訪問,本質上還是通過配置提供程序IConfigurationProvider來進行的。

假設,當我們查找一個Key為Name的配置,IConfigurationRoot 內部會遍歷所有Sources 屬性生成的IConfigurationProvider,然后依次調用IConfigurationProvider的TryGet來獲取Name的具體配置數(shù)據。

public interface IConfigurationBuilder
{
	//保存Build的一些公開的字典屬性,有需要的化可以使用該字段存放一些變量
    IDictionary<string, object> Properties { get; }
    //來自多個地方的配置源集合
    IList<IConfigurationSource> Sources { get; }
    //向Sources屬性中添加一個配置源
    IConfigurationBuilder Add(IConfigurationSource source);
    //基于所有配置源生成一個全局的配置,供程序讀寫,一般我們都是用這個接口對配置進行讀寫。
    IConfigurationRoot Build();
}

配置構建者實現(xiàn)類ConfigurationBuilder

在具體的配置構建者的Build方法中,我們可以看到,它依次調用IConfigurationProvider的Buid方法生成多個配置提供程序IConfigurationProvider ,然后將所有的配置提供程序providers 傳給了ConfigurationRoot。ConfigurationRoot正是調用providers 的一系列方法實現(xiàn)對配置的讀取、寫入、重載等操作。

 public class ConfigurationBuilder : IConfigurationBuilder
 {
     private readonly List<IConfigurationSource> _sources = new();
     public IList<IConfigurationSource> Sources => _sources;
     public IDictionary<string, object> Properties { get; } = new Dictionary<string, object>();
     public IConfigurationBuilder Add(IConfigurationSource source)
     {
         ThrowHelper.ThrowIfNull(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);
     }
 }

配置接口IConfiguration

這個接口就是最核心的配置接口,提供了對配置的讀取、寫入、重載等操作,它的實現(xiàn)類是ConfigurationRoot,上面我們已經介紹過,IConfiguration本身還是通過各個配置提供程序對配置進行訪問操作。

public interface IConfiguration
{
	//獲取或設置配置
    string? this[string key] { get; set; }
	//獲取指定key的配置子節(jié)點
    IConfigurationSection GetSection(string key);
	//獲取當前配置的直接子節(jié)點列表
    IEnumerable<IConfigurationSection> GetChildren();
    //當配置發(fā)生變更時的token
    IChangeToken GetReloadToken();
}

配置接口IConfigurationRoot

IConfigurationRoot其實是配置的根接口,該接口有個最重要的屬性Providers 負責保存所有的配置提供程序,IConfiguration對配置的訪問,就是通過遍歷這個Providers來訪問的。

public interface IConfigurationRoot : IConfiguration
{
	//強制重載所有配置
    void Reload();
    //所有配置提供程序
    IEnumerable<IConfigurationProvider> Providers { get; }
}

實現(xiàn)自定義配置提供程序

實現(xiàn)自定義配置提供程序,其實只需要實現(xiàn)三個類就可以,一個是配置源、一個是配置提供程序、一個是針對當前配置的擴展方法。第三個類可有可無,不過我們一般都要實現(xiàn)。我們來參考下基于命令行的配置提供程序類庫的文件。

接下來,我們來實現(xiàn)一個基于數(shù)據庫的配置提供程序,分別實現(xiàn)配置源DataBaseConfigurationSource 、配置提供程序DataBaseConfigurationExtensions 和擴展方法類DataBaseConfigurationExtensions,當然在這里我們只做對應的演示,沒有實現(xiàn)具體的配置方法。

public class DataBaseConfigurationSource : IConfigurationSource
{
    public IConfigurationProvider Build(IConfigurationBuilder builder)
    {
        return new DataBaseConfigurationProvider();
    }
}
public class DataBaseConfigurationProvider : ConfigurationProvider
{
    public override void Load()
    {
        base.Load();
        //讀取數(shù)據庫配置
    }
}
public static class DataBaseConfigurationExtensions
{
    public static IConfigurationBuilder AddDb(this IConfigurationBuilder configurationBuilder)
    {
        configurationBuilder.Sources.Add(new DataBaseConfigurationSource());
        return configurationBuilder;
    }
}

調用自定義配置程序

static void Main(string[] args)
{
    var builder = new ConfigurationBuilder()
        .AddDb()
        .Build();
    var value = builder["key"];
}

到此這篇關于深入理解.NET Core中的配置Configuration的方法的文章就介紹到這了,更多相關.NET Core配置Configuration內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • ajaxToolkit:TextBoxWatermarkExtender演示與實現(xiàn)代碼

    ajaxToolkit:TextBoxWatermarkExtender演示與實現(xiàn)代碼

    該控件的效果就是在TextBox控件上添加“水印”效果,也就是當TextBox為空時,顯示提示消息,一旦TextBox聚焦,樣式就消失,看起來還挺不錯的嗎,感興趣的你可以了解下哦,希望本文對你有所幫助
    2013-01-01
  • visual studio 2019使用net core3.0創(chuàng)建winform無法使用窗體設計器

    visual studio 2019使用net core3.0創(chuàng)建winform無法使用窗體設計器

    這篇文章主要介紹了visual studio 2019使用net core3.0創(chuàng)建winform無法使用窗體設計器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • ADO.NET防SQL注入與使用參數(shù)增刪改查

    ADO.NET防SQL注入與使用參數(shù)增刪改查

    這篇文章介紹了ADO.NET防SQL注入與使用參數(shù)實現(xiàn)增刪改查的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • 正則表達式速查表(ASP.NET)

    正則表達式速查表(ASP.NET)

    正則表達式速查表 ASP.NET,學習正則表達式的朋友可以參考下
    2012-03-03
  • ASP.NET圖片處理三類經典問題

    ASP.NET圖片處理三類經典問題

    這篇文章主要介紹了ASP.NET圖片處理三類經典問題,驗證碼的實現(xiàn)、給圖片加文字,最后一個就是生成縮略圖,感興趣的小伙伴們可以參考一下
    2015-09-09
  • asp.net畫曲線圖(折線圖)代碼 詳細注釋

    asp.net畫曲線圖(折線圖)代碼 詳細注釋

    asp.net畫曲線圖(折線圖), 需要的朋友可以參考下。
    2010-03-03
  • .Net 下區(qū)別使用 ByRef/ByVal 的重要性 分享

    .Net 下區(qū)別使用 ByRef/ByVal 的重要性 分享

    這篇文章介紹了.Net 下區(qū)別使用 ByRef/ByVal 的重要性,有需要的朋友可以參考一下
    2013-07-07
  • ASP.NET MVC中異常Exception攔截的深入理解

    ASP.NET MVC中異常Exception攔截的深入理解

    異常信息的處理在程序中非常重要, 在asp.net mvc中提供異常屬性攔截器進行對異常信息的處理,下面這篇文章主要給大家介紹了關于ASP.NET MVC中異常Exception攔截的相關資料,需要的朋友可以參考下
    2018-07-07
  • .NET使用QuestPDF生成PDF的實戰(zhàn)指南

    .NET使用QuestPDF生成PDF的實戰(zhàn)指南

    在數(shù)字化轉型的浪潮中,PDF文檔的生成需求早已從簡單的文本導出演變?yōu)閺碗s的數(shù)據可視化、動態(tài)布局和跨平臺兼容性挑戰(zhàn),傳統(tǒng)PDF生成工具面臨API復雜、學習曲線陡峭、性能瓶頸等痛點,QuestPDF的出現(xiàn),徹底改變了這一局面,本文將帶你全面掌握QuestPDF
    2025-08-08
  • Hangfire在ASP.NET CORE中的簡單實現(xiàn)方法

    Hangfire在ASP.NET CORE中的簡單實現(xiàn)方法

    下面小編就為大家分享一篇Hangfire在ASP.NET CORE中的簡單實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11

最新評論

修水县| 滨海县| 砀山县| 东明县| 丰顺县| 西充县| 双桥区| 白城市| 麦盖提县| 白玉县| 长汀县| 湖州市| 双峰县| 邳州市| 合江县| 封开县| 菏泽市| 江川县| 天镇县| 新丰县| 故城县| 深州市| 东平县| 江北区| 江永县| 固镇县| 来宾市| 福海县| 眉山市| 上思县| 孙吴县| 碌曲县| 兴国县| 莱西市| 屏东县| 南安市| 浑源县| 银川市| 合江县| 阳朔县| 池州市|