基础知识
配置的本质是键值对,微软对于配置提供了大量的配置源提供程序,包括xml,json,ini,环境变量,命令行参数,内存等等。还提供了一个扩展包用于配置绑定和类型转换。
-
依赖项
Microsoft.Extensions.Configuration.Abstractions:抽象包,用于编写扩展时使用
Microsoft.Extensions.Configuration:基础包提供了内存配置的方案
Microsoft.Extensions.Configuration.Json:json支持
Microsoft.Extensions.Configuration.EnvironmentVariables:环境变量支持
Microsoft.Extensions.Configuration.CommandLine:命令行参数
Microsoft.Extensions.Configuration.Binder:用于配置绑定到实体或者基本类型
-
核心接口
IConfiguration:配置的核心接口,用于读取配置
IConfigurationRoot:表示根配置,继承IConfiguration接口
IConfigurationSection:表示子配置节点,继承IConfiguration接口
IConfigurationBuilder:提供了大量的扩展,用于构建IConfiguration实列。
ConfigurationManager:实现了IConfigurationRoot、IConfigurationBuilder接口。因此ConfigurationManager既可以用于构建配置,也可以读取配置。
注册配置
{ "MvcOptions": { "Host": "127.0.0.1", "Port": 8080, "Urls": [ "http://127.0.0.1:80", "http://127.0.0.1:81", "http://127.0.0.1:82" ] }, "ConnectionStrings": { "default": "127.0.0.1" } }
public class MvcOptions { public string Host { get; set; } public int Port { get; set; } }
//需要安装相应的依赖包 static void Main(string[] args) { var configurationBuilder = new ConfigurationManager(); //内存配置源 configurationBuilder.AddInMemoryCollection(new Dictionary<string, string>() { { "m1","45"}, { "m2","45"} }); //json配置源 configurationBuilder.SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json"); //命令行配置源 configurationBuilder.AddCommandLine(args); //环境变量配置源:可以指定前缀 configurationBuilder.AddEnvironmentVariables("ASPNETCORE_"); }
构建配置
//由于ConfigurationManager实现了IConfiguration接口,并且没有build方法 //因此构建很简单,或者你根本不需要构建,但是建议把配置和读取分开 IConfiguration configuration = configurationBuilder;
读取配置
-
基础接口
//通过索引读取配置 string m1 = configuration["m1"]; //获取子配置 IConfigurationSection options = configuration.GetSection("MvcOptions"); var host = options["Host"]; //获取数组 IEnumerable<IConfigurationSection> sections = configuration.GetSection("MvcOptions:Urls").GetChildren(); foreach (IConfigurationSection item in sections) { var url = item.Value; } //内置的一个获取链接字符串的api var defaultConnectionString = configuration.GetConnectionString("default");
-
扩展接口,需要安装Binder支持
//将配置绑定到基本类型上,底层调用Convert.ToXXX(); var host = configuration.GetValue<string>("MvcOptions:Host"); var port = configuration.GetValue<int>("MvcOptions:Port"); //将配置绑定到实列上,底层调用GetValue var options1 = new MvcOptions(); configuration.Bind("MvcOptions", options); //将配置绑定到实列上,并返回这个实列,底层调用Bind var options2 = configuration.GetSection("MvcOptions").Get<MvcOptions>();