Appsetting配置与获取

ASP.NET Core 中,可以使用 ConfigurationBuilder 对象来构建。主要分为三部:配置数据源 -> ConfigurationBuilder -> 使用。数据源可来自字典或配置文件。数据源要么继承 IConfigurationSource ,要么从配置文件中读取。

1,来自字典

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

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

var dic = new Dictionary<string, string>() { 
    ["test"] = "配置"
    };  

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

string test = config["test"]; 

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

var dic = new Dictionary<string, string>(){  
    ["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:testaaa")
    .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<string, string>(){ 
    ["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<string, string>(){
    ["A"] = "6",
        ["B"] = "66",
            ["C"] = "666" 
    };             
TestOptions config = new ConfigurationBuilder()
    .AddInMemoryCollection(dic)
     .Build().Get<TestOptions>();
© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容