Configuration

基础知识

配置的本质是键值对,微软对于配置提供了大量的配置源提供程序,包括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>();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值