.NET?Core中配置Configuration實(shí)戰(zhàn)教程
在前面的一篇文章中,我們對(duì).NET 中的配置Configuration進(jìn)行了一個(gè)詳細(xì)的介紹,并且從整個(gè)源碼的解讀解釋了配置中的核心接口以及主要的實(shí)現(xiàn)類。文章鏈接為:http://www.dbjr.com.cn/aspnet/340345sy9.htm。這篇文章我們主要來介紹每種配置如何使用。
基于內(nèi)存的配置程序
基于內(nèi)存的配置程序主要是在內(nèi)存中維護(hù)了一個(gè)Key-Value鍵值對(duì)。
static void MemoryConfig() { List<KeyValuePair<string, string?>>? initialData = new List<KeyValuePair<string, string?>>(); initialData.Add(new KeyValuePair<string, string?>("name", "tom")); IConfigurationRoot configuration = new ConfigurationBuilder() .AddInMemoryCollection(initialData) .Build(); Console.WriteLine("name:" + configuration["name"]); }
調(diào)用如下:
static void Main(string[] args) { MemoryConfig(); }
基于現(xiàn)有的配置提供程序
這個(gè)配置提供程序用的相對(duì)較少,是微軟在Microsoft.Extensions.Configuration類庫中默認(rèn)實(shí)現(xiàn)的一個(gè)配置提供程序,它可以把已經(jīng)存在的配置IConfigurationRoot
封裝成一個(gè)配置提供程序。如果需要對(duì)針對(duì)現(xiàn)有配置快速Copy出一個(gè)新配置的話,可以使用這個(gè)配置提供程序。
static void ChainedConfig() { List<KeyValuePair<string, string?>>? initialData = new List<KeyValuePair<string, string?>>(); initialData.Add(new KeyValuePair<string, string?>("name", "tom")); //初始化一個(gè)已有的配置 IConfigurationRoot configuration = new ConfigurationBuilder() .AddInMemoryCollection(initialData) .Build(); //基于已有的配置,重新生成一個(gè)一模一樣的配置。 IConfigurationRoot newConfiguration = new ConfigurationBuilder() .AddConfiguration(configuration) .Build(); Console.WriteLine("name:" + configuration["name"]); }
基于命令行的配置提供程序
基于命令行的配置程序,可以從控制臺(tái)的命令行獲取配置,這個(gè)配置提供程序可以快速將命令行參數(shù)分解成Key-Value鍵值對(duì)。而不需要我們自己手動(dòng)對(duì)字符串進(jìn)行處理(一般我們會(huì)按照空格拆分成數(shù)組,然后按照等號(hào)獲取到鍵和值)
//基于命令行的配置 static void CommandLineConfig() { IConfigurationRoot configuration = new ConfigurationBuilder() .AddCommandLine(["name=tom","age=32"]) .Build(); Console.WriteLine("name:" + configuration["name"]);
基于環(huán)境變量的配置提供程序
.NET可以讀取環(huán)境變量中的Key-Value鍵值對(duì),并且可以過濾到指定的前綴來篩選。下面代碼中,程序?qū)?huì)加載環(huán)境變量中以TEST_開頭的所有變量到配置中,我們?cè)谙到y(tǒng)變量中,新增一個(gè)TEST_Name的變量,一定要重啟一下計(jì)算機(jī),否則新增的環(huán)境變量不會(huì)生效。然后我們的程序就可以讀取到TEST_Name的變量值
static void EnvironmentConfig() { IConfigurationRoot configuration = new ConfigurationBuilder() .AddEnvironmentVariables("Test_") .Build(); Console.WriteLine("name:" + configuration["Name"]); }
基于Json文件的配置提供程序
基于json的配置文件是我們最常用的配置文件格式了,.NET提供了標(biāo)準(zhǔn)的json配置提供程序,我們使用一下代碼從一個(gè)app.json文件中加載配置,并且app.json被修改的時(shí)候,程序中的配置也會(huì)被更新。
//基于Json文件的配置 static void AddJsonFileConfig() { IConfiguration configuration = new ConfigurationBuilder() .AddJsonFile("app.json", optional: true, reloadOnChange: true) .Build(); Console.WriteLine("name:" + configuration["name"]); }
app.json的配置文件內(nèi)容如下:
{ "person": { "name":"caoruipeng", "age":12, "school":"北京大學(xué)" }, "name":"tom11" }
基于XML文件的配置提供程序
基于XML的配置文件也是我們比較常用的配置文件格式了,.NET提供了標(biāo)準(zhǔn)的XML配置提供程序,我們使用一下代碼從一個(gè)app.xml文件中加載配置,并且app.xml被修改的時(shí)候,程序中的配置也會(huì)被更新。
//基于XML文件的配置 static void AddXmlFileConfig() { IConfiguration configuration = new ConfigurationBuilder() .AddXmlFile("app.xml", optional: true, reloadOnChange: true) .Build(); Console.WriteLine("name:" + configuration["name"]); }
app.xml的配置文件內(nèi)容如下:
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <config> <name>tom</name> <age>21</age> <school>beijing</school> </config>
基于Ini文件的配置提供程序
Ini配置文件平時(shí) 我們使用的比較少,不過微軟還是幫我們提供了基于Ini文件的配置提供程序。
//基于INI文件的配置 static void AddIniFileConfig() { IConfiguration configuration = new ConfigurationBuilder() .AddIniFile("app.ini", optional: true, reloadOnChange: true) .Build(); Console.WriteLine("name:" + configuration["person:name"]); }
app.ini文件的內(nèi)容如下:
[person] name=tom age=27
自定義配置提供程序
官方提供的配置提供程序基本上可以滿足我們的絕大部分需求,但是如果我們的配置存儲(chǔ)在注冊(cè)表中、存儲(chǔ)在數(shù)據(jù)庫中,這個(gè)時(shí)候官方的配置提供程序就無法滿足我們的要求,我們就需要自定義配置提供程序。自定義配置提供程序很簡(jiǎn)單,主要包括兩個(gè)類:自定義配置源IConfigurationSource
、自定義配置提供程序ConfigurationProvider
以及一個(gè)針對(duì)當(dāng)前配置的擴(kuò)展方法。下面代碼,我們模擬一個(gè)基于數(shù)據(jù)庫的配置提供程序,負(fù)責(zé)從數(shù)據(jù)庫的配置表Config表中讀取配置。當(dāng)然案例代碼,我們并不是真正的去讀取數(shù)據(jù)庫的表,大家可以自行完善代碼。
//自定義配置源 public class DataBaseConfigurationSource : IConfigurationSource { public IConfigurationProvider Build(IConfigurationBuilder builder) { return new DataBaseConfigurationProvider(); } } //自定義配置提供程序 public class DataBaseConfigurationProvider : ConfigurationProvider { public override void Load() { base.Load(); //讀取數(shù)據(jù)庫配置 } } //數(shù)據(jù)庫配置程序的擴(kuò)展方法 public static class DataBaseConfigurationExtensions { public static IConfigurationBuilder AddDb(this IConfigurationBuilder configurationBuilder) { configurationBuilder.Sources.Add(new DataBaseConfigurationSource()); return configurationBuilder; } } //調(diào)用案例 static void Main(string[] args) { var builder = new ConfigurationBuilder() .AddDb() .Build(); var value = builder["key"]; }
到此這篇關(guān)于.NET Core中的配置Configuration實(shí)戰(zhàn)的文章就介紹到這了,更多相關(guān).NET Core配置Configuration內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IP地址與整數(shù)之間的轉(zhuǎn)換實(shí)現(xiàn)代碼(asp.net)
把這個(gè)整數(shù)轉(zhuǎn)換成一個(gè)32位二進(jìn)制數(shù)。從左到右,每8位進(jìn)行一下分割,得到4段8位的二進(jìn)制數(shù),把這些二進(jìn)制數(shù)轉(zhuǎn)換成整數(shù)然后加上”?!本褪沁@個(gè)ip地址了2012-09-09.Net Core如何對(duì)MongoDB執(zhí)行多條件查詢
這篇文章主要介紹了.Net Core如何對(duì)MongoDB執(zhí)行多條件查詢,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07ASP.Net頁尾中添加JavaScript的最佳方法實(shí)戰(zhàn)分享
將JavaScript腳本或庫添加到asp.net頁的末尾方法有很多,究竟哪一個(gè)最好使呢有利于日后的維護(hù)啊,是個(gè)疑點(diǎn)啊,本文的出現(xiàn)將幫你解決所有的困惑,感興趣的你可不要錯(cuò)過了哈2013-02-02ASP.NET向Javascript傳遞變量兩種實(shí)現(xiàn)方法
ASP.NET向Javascript傳遞變量兩種實(shí)現(xiàn)方法,需要的朋友可以參考下2012-12-12使用ASP.NET?Web?API構(gòu)建Restful?API
這篇文章介紹了使用ASP.NET?Web?API構(gòu)建Restful?API的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04如何利用擴(kuò)展方法來鏈?zhǔn)降膶?duì)MVC 3中的頁面進(jìn)行驗(yàn)證
雖然擴(kuò)展方法只是改變了我們寫代碼的方式,但是如果我們使用得當(dāng),可以給我們帶來巨大的編碼效率的提升接下來介紹通過擴(kuò)展方法(鏈?zhǔn)椒椒ǎ镸VC 3視圖添加驗(yàn)證2013-01-01aspx實(shí)現(xiàn)的 jquery ui 的 flexgrid demo
這幾天沒事研究著jquery,真是個(gè)好東西,慢慢的知道了有jquery ui,一開始就被華麗的界面和簡(jiǎn)單的操作給吸引了,尤其是里面的flexgrid,對(duì)我而言可以說是非常寶貴的東西2009-12-12ASP.NET Core 應(yīng)用程序中的靜態(tài)文件中間件的實(shí)現(xiàn)
這篇文章主要介紹了ASP.NET Core 應(yīng)用程序中的靜態(tài)文件中間件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04ASP.NET?Core中Razor頁面與MVC區(qū)別介紹
這篇文章介紹了ASP.NET?Core中Razor頁面與MVC的區(qū)別,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02