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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

扒一扒.NET Core的环境配置提供程序

發布時間:2023/12/4 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 扒一扒.NET Core的环境配置提供程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

很久之前,在玩Docker的時候順便扒了扒,最近,終于下定決心花了些時間整理并成文,希望能夠給大家一些幫助。




目錄??
  • .NET Core中的配置

  • ASP.NET Core中的配置

  • 扒一扒環境變量提供程序

  • 為什么是“__”?

  • “__”如何變成了“:”?

  • 數據庫連接字符串的配置的特殊規則

  • 最后

?

前言

.NET Core的配置提高程序非常強大和靈活,支持從各種配置源讀取鍵值對:

·??????命令行參數

·??????目錄文件(.json、xml、ini)

·??????環境變量

·??????內存中的對象

·??????Azure Key Vault

本篇我們側重于扒一扒.NET Core的環境配置程序,了解其執行機制和特殊規則以及原理。因為通過環境變量來配置在很多場景都非常有用,尤其是在Docker環境之中。具體使用大家可以看看下面給出的截圖和配置示例。


.NET Core中的配置

?在.NET Core中,我們通常這么玩:

1.?????添加依賴:

??? <PackageReferenceInclude="Microsoft.Extensions.Configuration"Version="2.2.0" />

??? <PackageReferenceInclude="Microsoft.Extensions.Configuration.CommandLine"Version="2.2.0" />

<PackageReferenceInclude="Microsoft.Extensions.Configuration.EnvironmentVariables"Version="2.2.0" />

?

2.?????添加配置代碼

??????? privatestaticvoid Main(string[] args)

??????? {

??????????? var config = newConfigurationBuilder()

??????????????????????? //支持命令行參數

???????????????????????.AddCommandLine(args)

??????????????????????? //支持環境變量

???????????????????????.AddEnvironmentVariables()

???????????????????????.Build();

??? }

?

ASP.NET Core中的配置

因為在ASP.NET Core中,包“Microsoft.AspNetCore.App”已經包含了對“Microsoft.Extensions.Configuration”等包的依賴,因此在ASP.NET Core的應用程序中,通常我們會用以下代碼來啟用配置提供程序:

有時候我們也會使用下面代碼來自定義配置:

對于第一種寫法,我們可以通過查看源碼了解其具體機制:

?

扒一扒環境變量提供程序

接下來我們重點扒一扒環境變量提供程序,環境變量提供程序在容器這塊應用極廣,也極為方便,比如設置日志的輸出級別:

docker run --nameaspnetcore_sample --rm -it -p 8000:80 -e 'Logging__LogLevel__Default=Debug' microsoft/dotnet-samples:aspnetapp

?

docker run --nameaspnetcore_sample1 --rm -it -p 8000:80 microsoft/dotnet-samples:aspnetapp

?

通過上面的對比,我們可以第一個命令通過設置了環境變量“Logging__LogLevel__Default=Debug”輸出了調試日志。而且從上面代碼來看,環境變量的配置會覆蓋文件配置:

那么“Logging__LogLevel__Default”對應什么樣的文件配置呢?如下所示:

{

?"Logging": {

???"LogLevel": {

?????"Default": "Warning"

???}

?},

?"AllowedHosts": "*"

}

如上所示,這個配置我們在appsettings.json中能夠找到。不過很奇怪的是,為什么通過環境變量配置會變成“Logging__LogLevel__Default"呢(注意中間是兩個下劃線)?


為什么是“__”?

我們繼續來扒一扒。繼續看源碼:

首先我們查看AddEnvironmentVariables的代碼:

順藤摸瓜找到了

EnvironmentVariablesConfigurationSource:

最終扒開了EnvironmentVariablesConfigurationProvider的代碼,找到了關鍵:

我們來挨個解析下重點。


“__”如何變成了“:”?

這個“__”在我們使用的時候,怎么變成“:”的呢?比如我們使用的時候都是這么玩的:

appConfiguration["RedisCache:ConnectionString"]

關鍵代碼如下所示:

??????? private static stringNormalizeKey(string key)

??????? {

??? ????????return key.Replace("__",ConfigurationPath.KeyDelimiter);

??????? }


數據庫連接字符串的配置的特殊規則

在上圖我們看到了一些特殊的判斷,也就是扒出了數據庫連接字符串的幾個特殊名稱前綴,這是怎么回事呢?這里我們補充說明一下:

針對連接字符串,.NET Core提供了一些特殊的處理規則。主要支持以下數據庫:

連接字符串前綴

提供程序

CUSTOMCONNSTR_

自定義提供程序

MYSQLCONNSTR_

MySQL

SQLAZURECONNSTR_

Azure SQL 數據庫

SQLCONNSTR_

SQL Server

當發現有以上前綴的環境變量時,會進行一些特殊處理:根據前綴在ConnectionStrings節添加對應的鍵值對,并且添加數據庫提供程序的配置,如下所示:

環境變量鍵

轉換的配置鍵

提供程序配置條目

CUSTOMCONNSTR_<KEY>

ConnectionStrings:<KEY>

配置條目未創建。

MYSQLCONNSTR_<KEY>

ConnectionStrings:<KEY>

鍵:

ConnectionStrings:<KEY>_ProviderName:
?值:MySql.Data.MySqlClient

SQLAZURECONNSTR_<KEY>

ConnectionStrings:<KEY>

鍵:

ConnectionStrings:<KEY>_ProviderName:
?值:System.Data.SqlClient

SQLCONNSTR_<KEY>

ConnectionStrings:<KEY>

鍵:

ConnectionStrings:<KEY>_ProviderName:
?值:System.Data.SqlClient

?

如果說了這么多你還不太明白,簡單的來講,對于常用的數據庫連接字符串,.NET環境變量提供程序提供了內置的簡寫進行配置,比如在Docker參數中我們可以這么配置:

-e ‘SQLCONNSTR_Default=Server= 192.168.1.11;Database=test; User ID=dev;Password=dev;’

?

如上所示,其中Default對應配置文件的示例如下圖所示:

這樣說是否明白了呢?如上所示,主要支持MySQL、Azure SQL 數據庫和SQL Server。


最后

我們再來看看環境變量最終是如何變成配置路徑,如以下代碼:

至此,整個環境變量提供程序均已扒完,這次就說到這里。

.NET Core的配置非常靈活和強大,想了解更多,大家可以直接通過官網學習:

https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.2#environment-variables-configuration-provider

?只是結合代碼,能夠更易于我們理解以及使用。


轉載是一種動力 分享是一種美德

如果喜歡作者的文章,請關注“magiccodes”訂閱號以便第一時間獲得最新內容。本文版權歸作者和湖南心萊信息科技有限公司共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


QQ群:

編程交流群<85318032>?

產品交流群<897857351>


長沙線下技術社區已經創建,有興趣者可以通過客服加群。接下來,我們會定期組織一些線下技術交流分享會,以饗大家。



總結

以上是生活随笔為你收集整理的扒一扒.NET Core的环境配置提供程序的全部內容,希望文章能夠幫你解決所遇到的問題。

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