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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

10分钟就能学会的.NET Core配置

發布時間:2023/12/4 asp.net 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 10分钟就能学会的.NET Core配置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

.NET Core為我們提供了一套用于配置的API,它為程序提供了運行時從文件、命令行參數、環境變量等讀取配置的方法。配置都是鍵值對的形式,并且支持嵌套,.NET Core還內建了從配置反序列化為POCO對象的支持。

目前支持以下配置Provider:

  • 文件(INI,JSON,XML)

  • 命令行參數

  • 環境變量

  • 內存中的.NET對象

  • User Secrets

  • Azure Key Vault

如果現有Provider不能滿足你的使用場景,還允許自定義Provider,比如從數據庫中讀取。

配置相關的包

包管理器中搜索“Microsoft.Extensions.Configuration",所有與配置相關的包都會列舉出來

從包的名稱基本就可以看出它的用途,比如Microsoft.Extensions.Configuration.Json是Json配置的Provider,Microsoft.Extensions.Configuration.CommandLine是命令行參數配置的Provider,還有.NET Core程序中使用User Secrets存儲敏感數據這篇文章中使用的Microsoft.Extensions.Configuration.UserSecrets。

文件配置(以Json為例)

Json配置,需要安裝Microsoft.Extensions.Configuration.Json包。

命令行下安裝執行以下命令

dotnet add package Microsoft.Extensions.Configuration.Json -v 1.1.2

調用AddJsonFile把Json配置的Provider添加到ConfigurationBuilder中。

class Program{ ? ?public static IConfigurationRoot Configuration { get; set; } ? ?static void Main(string[] args) ? ?{ ? ? ? ?var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json");Configuration = builder.Build();} }

如果使用Xml或Ini,只需安裝相應的包,然后調用相應的擴展方法AddXmlFile("appsettings.xml)或AddIniFile("appsettings.ini")。

SetBasePath是指定從哪個目錄開始查找appsettings.json。如果appsettings.json在configs目錄中,那么調用AddJsonFile應該指定的路徑為"configs/appsettings.json"。

下面是演示用的Json配置,后面會講解所有讀取它的方法

{"AppId": "12345","Logging": {"IncludeScopes": false,"LogLevel": {"Default": "Debug","System": "Information","Microsoft": "Information"}},"GrantTypes": [{"Name": "authorization_code"},{"Name": "password"},{"Name": "client_credentials"}]}

讀取JSON配置

1.使用Key讀取

Configuration["AppId"]; // 結果 12345Configuration["Logging:IncludeScopes"]; // 結果 falseConfiguration["Logging:LogLevel:Default"]; // 結果 DebugConfiguration["GrantTypes:0:Name"]; // 結果 authorization_code

讀取嵌套的配置,使用冒號隔開;讀取數組形式的配置,使用數組的下標索引,0表示第一個。

如在其他地方用到Configuration的時候,可以通過構造函數注入IConfiguration。

首先配置IConfiguration的依賴

services.AddSingleton<IConfiguration>(Configuration);

然后在通過構造函數注入

private readonly IConfiguration _configuration;public GetConfig(IConfiguration configuration){_configuration = configuration; }

2.使用GetValue<T>
這是一個擴展方法,使用它需要安裝Microsoft.Extensions.Configuration.Binder包。

Configuration.GetValue<int>("AppId", 12345); // 結果 12345Configuration.GetValue<bool>("Logging:IncludeScopes", false); // 結果 falseConfiguration.GetValue<string>("Logging:LogLevel:Default", "Debug"); // 結果 DebugConfiguration.GetValue<string>("GrantTypes:0:Name", "authorize_code"); // 結果 authorization_code

GetValue方法的泛型形式有兩個重載,一個是GetValue ("key"),另一個可以指定默認值,GetValue ("key",defaultValue)。如果key的配置不存在,第一種的結果為default(T),第二種的結果則為指定的默認值。

3.使用Options
這種方式需要安裝Microsoft.Extensions.Options.ConfigurationExtensions包。

調用AddOptions()添加使用Options需要的服務。

services.AddOptions()

定義與配置對應的POCO類

public class MyOptions{ ?
?public int AppId { get; set; } ?
??public LoggingOptions Logging { get; set; }
?public List<GrantType> GrantTypes { get; set; } ?
?
??public class GrantType{ ? ? ? ?public string Name { get; set; }} }public class LoggingOptions{ ? ?
??public bool IncludeScopes { get; set; } ?
?? ?public LogLevelOptions LogLevel { get; set; } }public class LogLevelOptions{ ?
?? ??public string Default { get; set; } ?
?? ???public string System { get; set; } ?
?? ????public string Microsoft { get; set; } }

綁定整個配置到POCO對象上

services.Configure<MyOptions>(Configuration);

也可以綁定特定節點的配置

services.Configure<LoggingOptions>(Configuration.GetSection("Logging"));

services.Configure<LogLevelOptions>(Configuration.GetSection("Logging:LogLevel"));

在需要用到配置的地方,通過構造函數注入,或者直接使用ServiceProvider獲取。

private readonly MyOptions _myOptions;public GetConfig(IOptions<MyOptions> myOptionsAccessor){_myOptions = myOptionsAccessor.Value; }

var myOptionsAccessor = serviceProvider.GetService<IOptions<MyOptions>>();var myOptions = myOptionsAccessor.Value;

4.使用Get<T>
Get<T>是.NET Core 1.1才引入的。

var myOptions = Configuration.Get<MyOptions>();

var loggingOptions = Configuration.GetSection("Logging").Get<LoggingOptions>();

5.使用Bind
和Get<T>類似,建議使用Get<T>。

var myOptions = new MyOptions(); Configuration.Bind(myOptions);

var loggingOptions = new LoggingOptions(); Configuration.GetSection("Logging").Bind(loggingOptions);

文件變化自動重新加載配置

IOptionsSnapshot支持配置文件變化自動重新加載配置。使用IOptionsSnapshot也很簡單,AddJsonFile有個重載,指定reloadOnChange:true即可。

var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("configs/appsettings.json", optional: false, reloadOnChange: true);

內存中配置

內存中配置調用AddInMemoryCollection(),其余和Json配置一樣。

var dict = new Dictionary<string, string> {{"AppId","12345"},{"Logging:IncludeScopes","false"},{"Logging:LogLevel:Default","Debug"},{"Logging:LogLevel:System","Information"},{"Logging:LogLevel:Microsoft","Information"},{"GrantTypes:0:Name","authorization_code"},{"GrantTypes:1:Name","password"},{"GrantTypes:2:Name","client_credentials"} };var builder = new ConfigurationBuilder().AddInMemoryCollection(dict);

var builder = new ConfigurationBuilder().AddInMemoryCollection();Configuration["AppId"] = "12345";

命令行參數配置

命令行參數配置需要安裝Microsoft.Extensions.Configuration.CommandLine包。

調用AddCommandLine()擴展方法將命令行配置Provider添加到ConfigurationBuilder中。

var builder = new ConfigurationBuilder().AddCommandLine(args);

傳遞參數有兩種形式

dotnet run /AppId=12345

dotnet run --AppId 12345

如果為--AppId提供一個縮寫的參數-a,那么執行dotnet run -a 12345會報在switch mappings中沒有-a定義的錯誤。

幸好AddCommandLine還有一個重載,可以傳一個switch mapping。

var builder = new ConfigurationBuilder() .AddCommandLine(args, new Dictionary<string, string> {{"-a","AppId"} });

這樣再運行下面的命令就不會報錯了。

dotnet run -a 12345

環境變量配置

環境變量配置需要安裝Microsoft.Extensions.Configuration.EnvironmentVariables包。

調用AddEnvironmentVariables()擴展方法將環境變量配置Provider添加到ConfigurationBuilder中。

var builder = new ConfigurationBuilder().AddEnvironmentVariables();

獲取所有的環境變量

Environment.GetEnvironmentVariables();

根據名稱獲取環境變量

Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");

自定義配置Provider

自定義配置Provider需要繼承IConfigurationSource實現自己的配置源,以及繼承ConfigurationProvider,重寫Load方法。

關于自定義配置Provider,我寫了兩個開源包,Cxlt.Extensions.Configuration.EF和Cxlt.Extensions.Configuration.Yaml,通過這兩個項目,我會詳細講解如何實現自己的配置Provider。文章《實現自己的.NET Core配置Provider之EF》和《實現自己的.NET Core配置Provider之Yaml》過幾天也會發布。

配置Provider順序

.NET Core的配置API允許同時使用多個配置Provider。

var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("configs/appsettings.json").AddXmlFile("configs/appsettings.xml").AddCommandLine(args).AddEnvironmentVariables();

如果兩個Provider都有相同的配置,那么添加Provider的順序就非常重要了,因為后加入的會覆蓋前面的。

另外建議環境變量的配置Provider放到最后。

最后

.NET Core的配置是很基礎的內容,學起來自然不難,基本上動手實踐一遍就能掌握。越是簡單的東西,在日后的開發中可能幫你節約很多時間。希望這篇文章對你有幫助,請點贊支持一下,也歡迎關注“chengxulvtu"公眾號,提前獲

原文地址:http://www.cnblogs.com/nianming/p/7083964.html


.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注

總結

以上是生活随笔為你收集整理的10分钟就能学会的.NET Core配置的全部內容,希望文章能夠幫你解決所遇到的問題。

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