.NET Core - 内存配置和命令行配置方式详解

Table of Contents

 

内存配置方式

命令行配置方式

支持的命令格式

引用包

代码演示

命令替换


内存配置方式

上节介绍配置框架时,给出了一段示例代码

IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

configurationBuilder.AddInMemoryCollection(
    new Dictionary<string, string>()
    {
        {"key1","value1" },
        {"key2","value2" },
        {"section1:key3","value3" },
        {"section2:section3:key4","value4" }
    }
    );

IConfigurationRoot configurationRoot = configurationBuilder.Build();

Console.WriteLine($"key1:{configurationRoot["key1"]}");
Console.WriteLine($"key2:{configurationRoot["key2"]}");
Console.WriteLine($"key3:{configurationRoot["section1:key3"]}");

IConfigurationSection section1 = configurationRoot.GetSection("section1");
Console.WriteLine($"section1_key3:{section1["key3"]}");

IConfigurationSection section3 = configurationRoot.GetSection("section2:section3");
Console.WriteLine($"section2_section3_key4:{section3["key4"]}");

其实,这里使用的

configurationBuilder.AddInMemoryCollection();

即使内存配置的方式,因此这里主要说下命令行配置方式

 

命令行配置方式

支持的命令格式

  • 无前缀的  key=value 模式
  • 双中横线模式  --key=value   --key value
  • 正斜杠模式 /key=value  /key value
  • 备注:使用无前缀模式时,必须使用=,其他2种模式才可使用空格分隔符

引用包

  • Microsoft.Extensions.Configuration.Abstractions
  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.CommandLine

代码演示

在调试命令行配置时,我们可以右键项目,在弹出的属性窗口,选择调试项目,在命令行参数栏填写我们的命令,如

也可以通过lanchSettings.json文件进行编辑

{
  "profiles": {
    "06_Configuration_CommandLine": {
      "commandName": "Project",
      "commandLineArgs": "cmd1=value1 /cmd2=value2 /cmd3 value3 --cmd4=value4 --cmd5 value5 --cmd6:cmd6 value6" // --k1 value1_new -k2 value2_new
    }
  }
}

准备好这些后,我们可以通过

configurationBuilder.AddCommandLine(args);

来启用命令行配置

通过如下代码来测试

IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddCommandLine(args);

IConfigurationRoot configurationRoot = configurationBuilder.Build();
Console.WriteLine($"cmd1:{configurationRoot["cmd1"]}");
Console.WriteLine($"cmd2:{configurationRoot["cmd2"]}");
Console.WriteLine($"cmd3:{configurationRoot["cmd3"]}");
Console.WriteLine($"cmd4:{configurationRoot["cmd4"]}");
Console.WriteLine($"cmd5:{configurationRoot["cmd5"]}");
Console.WriteLine($"cmd6_cmd6:{configurationRoot["cmd6:cmd6"]}");

IConfigurationSection configurationSection = configurationRoot.GetSection("cmd6");
Console.WriteLine($"cmd6:{configurationSection["cmd6"]}");

命令替换

除了常规的配置方式外,命令行配置还提供了命令替换功能,我们可以定义一个mapper来存储需要被替换的命令,这样,如果在参数中配置了该替换值的值,那么被替换键的值将被替换。命令替换通常通过“-”或“--”来标识。

var mapper = new Dictionary<string, string>() { { "--k1", "cmd1" }, { "-k2", "cmd2" } };
configurationBuilder.AddCommandLine(args, mapper);

IConfigurationRoot configurationRoot = configurationBuilder.Build();
Console.WriteLine($"--key1:{configurationRoot["--k1"]}");
Console.WriteLine($"key1:{configurationRoot["cmd1"]}");
Console.WriteLine($"-key2:{configurationRoot["-k2"]}");
Console.WriteLine($"key2:{configurationRoot["cmd2"]}");

这里,需要注意

  • 命令替换,类似于起别名,首先要定义字典
  • 使用于类似--help用-h代替的场景
  • 映射字典不能包含重复key,否则报错

本节结束,下节讲解环境变量配置和文件提供程序配置方式。

 

源码可访问

https://github.com/IronMarmot/Samples/tree/master/CoreSamples

更多课程详细内容,可识别下方二维码购买。

扫描二维码购买课程,可后台留言获得10元红包返现。

                                                 

部分内容来源于网络,侵删。

更多精彩内容,请微信搜索攻城狮客栈 或扫描下方二维码

------------------------------------------------------------------------------

公众号:攻城狮客栈

CSDN:画鸡蛋的不止达芬奇

 

                                                                 

让我们一起变的更优秀。


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值