目录1,来自字典2,来自配置文件3,层次结构4,映射

ASP.NET Core 中,可以使用 ConfigurationBuilder 对象来构建。

主要分为三部:配置数据源 -> ConfigurationBuilder -> 使用。

数据源可来自字典或配置文件。

数据源要么继承 IConfigurationSource ,要么从配置文件中读取。

1,来自字典

我们先使用字典存储键值对,来设置配置, test = 配置,然后使用 ConfigurationBuilder.Add() 方法添加数据源, Add 方法可以添加继承了 IConfigurationSource 的数据源。

MemoryConfigurationSource 继承了 IConfigurationSource ,使用字典作为数据源。

var dic = new Dictionary()

{

["test"] = "配置"

};

var config = new ConfigurationBuilder()

.Add(new MemoryConfigurationSource() { InitialData = dic }).Build();

string test = config["test"];

老是 new 不太爽,可以使用下面的方法来读取字典中的数据源:

var dic = new Dictionary()

{

["test"] = "配置"

};

var config = new ConfigurationBuilder()

.AddInMemoryCollection(dic)

.Build();

string test = config["test"];

2,来自配置文件

假如在 项目根目录下创建一个 json 文件,内容如下:

{

"test":"配置"

}

那么可以这样读取配置:

var config = new ConfigurationBuilder()

.AddJsonFile("test.json")

.Build();

string test = config["test"];

Console.WriteLine(test);

如果配置文件不在根目录下,则可以使用 SetBasePath() 来定义路径,示例如下:

var config = new ConfigurationBuilder()

.SetBasePath("E:\\test\\aaa")

.AddJsonFile("test.json")

.Build();

上面看到,获取配置项是非常简单的, config["{KeyName}"] 即可获得 value。

另外,可以监控 json 文件,当 json 文件发生更改时,主动更新。

config.AddJsonFile("appsettings.json",

optional: true,

reloadOnChange: true);

3,层次结构

配置数据源可以有层次结构。

ASP.NET Core 中,都会有个 appsettings.json 文件,其内容如下:

{

"Logging": {

"LogLevel": {

"Default": "Information",

"Microsoft": "Warning",

"Microsoft.Hosting.Lifetime": "Information"

}

}

}

那么我们使用时,可以使用 : 符号获取下一层子项的配置。

var config = new ConfigurationBuilder()

.AddJsonFile("appsettings.json")

.Build();

string test = config["Logging:LogLevel:Default"];

如果你只想 获取 json 文件中 LogLevel 部分的配置,可以使用 GetSection() 方法。

var config = new ConfigurationBuilder()

.AddJsonFile("appsettings.json")

.Build()

.GetSection("Logging:LogLevel");

string test = config["Default"];

通过 json 配置文件,我们可以很方便地构建层级结构的配置,如果想在字典中存储,可以使用 "{k1}:{k2}" 这种形式存。例如:

var dic = new Dictionary()

{

["testParent:Child1"] = "6",

["testParent:Child2"] = "666"

};

var config = new ConfigurationBuilder()

.AddInMemoryCollection(dic)

.Build().GetSection("testParent");

string test = config["Child1"];

4,映射

我们可以使用 Get<>() 方法,将配置映射为对象。

public class TestOptions

{

public string A { get; set; }

public string B { get; set; }

public string C { get; set; }

}

var dic = new Dictionary()

{

["A"] = "6",

["B"] = "66",

["C"] = "666"

};

TestOptions config = new ConfigurationBuilder()

.AddInMemoryCollection(dic)

.Build().Get();

你也可以参考 https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1#getsection-getchildren-and-exists

查看原文