前言
配置是應用程序發佈到各種環境的必備能力
配置框架的核心組件包
- Microsoft.Extensions.Configuration. Abstractions--抽象包
- ●Microsoft.Extensions.Configuration--實現包
在我們通常使用的配置,都是以key和value的形式來存放的,無論是使用Json還是XML本質上都是key和value的結構,配置框架也是以key-value鍵值對的方式抽象了配置。這就意味着我們在使用的時候只關心key和value就可以了。
另外配置框架還支持配置各種數據源,比如我們可以從命令行讀取,從環境變量讀取,從文件讀取。
配置框架的核心類型
- IConfiguration
- IConfigurationRoot
- IConfigurationSection
- IConfigurationBuilder
配置框架有一個核心的擴展點,就是諸如我們自己的配置源,也就是說我們可以指定任意的配置數據來源注入到我們的配置框架裏面。
使用Nuget引入兩個核心組件包
using System;
using System.Collections.Generic;
using Microsoft.Extensions.Configuration;
namespace ConfigurationDemo
{
class Program
{
static void Main(string[] args)
{
IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddInMemoryCollection(new Dictionary<string, string>()
{
{ "key1","value1" },
{ "key2","value2" },
{ "section1:key4","value4" },
});
IConfigurationRoot configurationRoot = builder.Build();
IConfiguration config = configurationRoot;
Console.WriteLine(configurationRoot["key1"]);
Console.WriteLine(configurationRoot["key2"]);
}
}
}
第1行代碼:Config builder是用來構建我們配置的核心,我們所有的配置都是在Builder中完成。
第2行代碼:是我們注入了一個內存的配置數據源,定義了三個配置
第3行代碼:Builder方法是用來把所有的配置構建出來,並且獲得一個IConfigurationRoot ,IConfigurationRoot 表示我們配置的根,也就是說我們讀取配置的動作都需要從IConfigurationRoot這個對象讀取的。
運行項目可以看到程序獲取到了key1和key2的值並打印了出來。
section
section 的作用是指當我們的配置不僅僅是簡單的key value的時候,比如說需要把配置分組這個時候我們就可以用section來定義。section每一節是用冒號來作爲節的分隔符。
比如說我們定義了section1我們用冒號來連接我們的key
IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddInMemoryCollection(new Dictionary<string, string>()
{
{ "key1","value1" },
{ "key2","value2" },
{ "section1:key4","value4" },
{ "section2:key5","value5" },
{ "section2:key6","value6" },
{ "section2:section3:key7","value7" }
});
獲取 section
獲取section1並打印section1裏面的“key4”
IConfigurationSection section = configurationRoot.GetSection("section1");
Console.WriteLine($"key4:{section["key4"]}");
多級嵌套
比如我們在section2中嵌套section3
{"section2:section3:key7","value7"}
獲取並輸出section3的“key7”
var section3 = section2.GetSection("section3");
Console.WriteLine($"key7:{section3["key7"]}");