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

.NET?6全新配置對象ConfigurationManager介紹

 更新時(shí)間:2021年11月23日 16:21:34   作者:初久的私房菜  
這篇文章介紹了.NET?6全新配置對象ConfigurationManager,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

介紹

本節(jié)為大家?guī)?code>.NET 6新增的ConfigurationManager,很多人好奇為啥要講這個(gè),讀取加載配置信息都隨手就來了,我們往下看一下。

翻譯:這添加了 ASP.NET Core 的新 WebApplcation WebApplicationBuilder已經(jīng)使用的類型,允許從配置(例如appsettings.jsonDOTNET_/ASPNETCORE_環(huán)境變量)中讀取,同時(shí)仍然能夠添加新的配置源,而無需顯式重建配置。每次通過IConfigurationBuilder界面添加源時(shí)IConfiguration,都會立即自動更新。

回顧歷史

我們在使用.NET 5開發(fā)的時(shí)候,采用IConfigurationBuilder添加配置源。調(diào)用Build()構(gòu)建器讀取每個(gè)配置源,并構(gòu)建最終配置IConfigurationRoot。

private static IConfigurationRoot BuildConfiguration()
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), "../MyCompanyName.MyProjectName.DbMigrator/"))
                .AddJsonFile("appsettings.json", optional: false);

            return builder.Build();
        }

當(dāng)然我們正常系統(tǒng)開發(fā)基本上不會自己去調(diào)用ConfigurationBuilder或者調(diào)用Build(),這都在.Net Core底部給我們完成了。

那么這個(gè)類型推出的意義是什么呢?

舉個(gè)栗子Use Application ID and X.509 certificate for non-Azure-hosted apps,這是微軟官方給出的案例,我來說明一下,配置 Azure Key Vault 提供程序需要一個(gè)配置值, 那么我是先有雞還是先有蛋呢——在構(gòu)建配置之前無法添加配置源!。

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((context, config) =>
        {
            if (context.HostingEnvironment.IsProduction())
            {
                var builtConfig = config.Build();

                using var store = new X509Store(StoreLocation.CurrentUser);
                store.Open(OpenFlags.ReadOnly);
                var certs = store.Certificates.Find(
                    X509FindType.FindByThumbprint,
                    builtConfig["AzureADCertThumbprint"], false);

                config.AddAzureKeyVault(new Uri($"https://{builtConfig["KeyVaultName"]}.vault.azure.net/"),
                                        new ClientCertificateCredential(builtConfig["AzureADDirectoryId"], builtConfig["AzureADApplicationId"], certs.OfType<X509Certificate2>().Single()),
                                        new KeyVaultSecretManager());

                store.Close();
            }
        })
        .ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>());

我們的步驟是:

  1. 初始化配置
  2. 調(diào)用IConfigurationBuilder.Build()構(gòu)建配置
  3. 從IConfigurationRoot中檢索所需的配置值
  4. 添加配置源
  5. 框架調(diào)用Build(),生成最終應(yīng)用程序配置。

這里我們調(diào)用了Build()兩次,這會產(chǎn)生什么問題呢?

ConfigurationBuilder.Build()每次調(diào)用會迭代所有源,加載提供者,并產(chǎn)生新的實(shí)例ConfigurationRoot.大家應(yīng)該都懂讀取文件所需的消耗吧。

新的實(shí)現(xiàn)

我們在使用ConfigurationManager時(shí),當(dāng)IConfigurationSource添加一個(gè)AddJsonFile()調(diào)用,提供程序會立即加載,并更新配置。

 using var config = new ConfigurationManager();

    config.AddEnvironmentVariables(prefix: "MyCustomPrefix_");

    if (config["FileConfig"] == "enabled")
    {
        config.AddJsonFile("MyConfig.json", optional: true, reloadOnChange: true);
    } 

    string myValueFromJson = config["JsonConfigValue"];


public class ConfigurationManager
{

    private void AddSource(IConfigurationSource source)
    {
        lock (_providerLock)
        {
            IConfigurationProvider provider = source.Build(this);
            _providers.Add(provider);

            provider.Load();
            _changeTokenRegistrations.Add(ChangeToken.OnChange(() => provider.GetReloadToken(), () => RaiseChanged()));
        }

        RaiseChanged();
    }
}


private void ReloadSources()
{
    lock (_providerLock)
    {
        DisposeRegistrationsAndProvidersUnsynchronized();

        _changeTokenRegistrations.Clear();
        _providers.Clear();

        foreach (var source in _sources)
        {
            _providers.Add(source.Build(this));
        }

        foreach (var p in _providers)
        {
            p.Load();
            _changeTokenRegistrations.Add(ChangeToken.OnChange(() => p.GetReloadToken(), () => RaiseChanged()));
        }
    }

    RaiseChanged();
}

注意:ConfigurationManager因?yàn)闀魏卧窗l(fā)生更改后必須刪除所有內(nèi)容并重新開始,遍歷每個(gè)源,重新加載它們。如果你做了很多的配置源操縱的,那么如果使用ConfigurationManager會帶來相反的效果.

ConfigurationManager適用于配置部分建造和、完全構(gòu)建。

結(jié)語

請不要關(guān)心在使用.Net 6的時(shí)候該使用ConfigurationManager還是ConfigurationBuilder,在開發(fā)中根據(jù)需求去使用不同的加載方案才是最好的。

到此這篇文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • ASP.NET中ImageButton圖片按鈕控件的使用

    ASP.NET中ImageButton圖片按鈕控件的使用

    本文主要介紹ImageButton控件的基礎(chǔ)使用方法,該控件類似Button控件,但又比Button豐富,下面看它的具體使用。
    2016-04-04
  • Asp.net基礎(chǔ)知識掃盲篇

    Asp.net基礎(chǔ)知識掃盲篇

    這篇文章主要介紹了Asp.net基礎(chǔ)知識掃盲篇與問答篇對想了解asp.net的朋友應(yīng)該有所幫助
    2021-05-05
  • 簡單的啟動窗體

    簡單的啟動窗體

    簡單的啟動窗體...
    2006-10-10
  • .Net行為型設(shè)計(jì)模式之觀察者模式(Observer)

    .Net行為型設(shè)計(jì)模式之觀察者模式(Observer)

    這篇文章介紹了.Net行為型設(shè)計(jì)模式之觀察者模式(Observer),文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C#聲明方法實(shí)例說明

    C#聲明方法實(shí)例說明

    方法(Method)是一個(gè)已命名的語句集。如果以前使用過其他編程語言,如C或Visual Basic等,就可以將方法視為函數(shù)或者子程序相似的東西。每個(gè)方法都有一個(gè)名稱和一個(gè)主體。方法名應(yīng)該是一個(gè)有意義的標(biāo)識符,它應(yīng)描述出方法的用途(如CalculateIncomeTax)。方法主體包含了調(diào)用方法時(shí)實(shí)際執(zhí)行的語句。你可以為大多數(shù)方法提供一些數(shù)據(jù)來進(jìn)行處理,并讓它返回一些信息(通常是處理結(jié)果)。方法是一種基本的、功能強(qiáng)大的編程機(jī)制。
    2008-04-04
  • ASP.NET中HttpContext對象下的屬性介紹

    ASP.NET中HttpContext對象下的屬性介紹

    這篇文章介紹了ASP.NET中HttpContext對象下的屬性,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • WPF引用MVVM框架與使用方法

    WPF引用MVVM框架與使用方法

    這篇文章介紹了WPF引用MVVM框架與使用方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • VisualStudio 2008中常用快捷鍵

    VisualStudio 2008中常用快捷鍵

    Visual Studio中的菜單很多,二級菜單也有不少,為了方便還是記點(diǎn)快捷鍵,既方便又迅速。
    2009-09-09
  • 搭建基礎(chǔ)結(jié)構(gòu)的ABP解決方案介紹

    搭建基礎(chǔ)結(jié)構(gòu)的ABP解決方案介紹

    這篇文章介紹了搭建基礎(chǔ)結(jié)構(gòu)的ABP解決方案的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • .Net創(chuàng)建型設(shè)計(jì)模式之建造者、生成器模式(Builder)

    .Net創(chuàng)建型設(shè)計(jì)模式之建造者、生成器模式(Builder)

    這篇文章介紹了.Net設(shè)計(jì)模式之建造者、生成器模式(Builder),文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05

最新評論

象州县| 大安市| 育儿| 桃园市| 社会| 安陆市| 托克托县| 姚安县| 无极县| 渑池县| 平昌县| 清流县| 博白县| 东乡| 定陶县| 桂平市| 西林县| 吉隆县| 河曲县| 磴口县| 阿拉尔市| 临西县| 阿拉善右旗| 汝城县| 仪陇县| 平原县| 宁波市| 潞城市| 宜君县| 静宁县| 昭平县| 响水县| 衡水市| 绥江县| 洪雅县| 铅山县| 平湖市| 军事| 松滋市| 托克托县| 长顺县|