.Net 配置系统-其他方式读取配置

使用命令行方式配置

引用命令行包:Microsoft.Extensions.Configuration.CommandLine

所有引用的包如下所示:

如果要使用命令行的形式配置上图的参数,程序运行后,参数传递方式如下图所示:

ConfigOptions.exe是项目的名称,后面的name,age等都是要传递的参数。

完整代码:

Program.cs

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;

namespace ConfigOptions
{
    class Program
    {
        static void Main(string[] args)
        {

            {
                ServiceCollection services = new ServiceCollection();
                services.AddScoped<ConfigTest>();//往DI容器中注册自定义类

                ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
                //configurationBuilder.AddJsonFile("config.json", optional: true, reloadOnChange: true);
                configurationBuilder.AddCommandLine(args);
                IConfigurationRoot root = configurationBuilder.Build();

                //将Options添加到DI容器中
                //将ConfigJson对象绑定到根节点上面
                services.AddOptions().Configure<ConfigJson>(e => root.Bind(e));

                using (var sp = services.BuildServiceProvider())
                {
                    var c = sp.GetRequiredService<ConfigTest>();
                    c.Show();
                    Console.ReadKey();
                }
            }
        }
    }

    class ConfigJson
    {
        public string name { get; set; }
        public string age { get; set; }
        public Proxy proxy { get; set; }
    }

    class Proxy
    {
        public string address { get; set; }
        public int port { get; set; }
    }


}


ConfigTest.cs

using Microsoft.Extensions.Options;
using System;

namespace ConfigOptions
{
    class ConfigTest
    {
        private readonly IOptionsMonitor<ConfigJson> options;
        public ConfigTest(IOptionsMonitor<ConfigJson> options)
        {
            this.options = options;
        }

        public void Show()
        {
            Console.WriteLine(options.CurrentValue.name);
            Console.WriteLine(options.CurrentValue.age);

            Console.WriteLine(options.CurrentValue.proxy.address);
            Console.WriteLine(options.CurrentValue.proxy.port);
        }
    }
}

如果是在开发过程中调试程序,除了上面在命令行窗口中输入参数外,还可以在vs中直接将参数写在调试窗口:

 

 执行结果:

使用环境变量方式配置

使用环境变量配置和命令行配置的流程是差不多的,也是需要引用相关的包

Microsoft.Extensions.Configuration.EnvironmentVariables

调试窗口中配置环境变量的参数,这种做法仅限于开发过程中调试,如果是发布项目,还是需要在Windows的环境变量中配置。

代码只需要在原来的基础上稍作调整,把读取参数从命令行改为从环境变量读取。

 执行结果:

在使用环境变量作为配置参数时,为了避免自定义的参数名称和原有的环境变量名称发生冲突,可以在自定义的参数名称前加上前缀,例如加上 CUS_ ,代表自定义参数。

 这样就可以避免和系统本身已有的环境变量名称发生冲突。

总结:

1.从配置文件读取参数

configurationBuilder.AddJsonFile("config.json", optional: true, reloadOnChange: true)

config.json:配置文件名称(注意设置为‘如果较新则复制’)。

optional:文件是否可选。

reloadOnChange:如果文件发生更改,是否应重载配置。

2.从命令行读取参数

configurationBuilder.AddCommandLine(args)

3.从环境变量读取参数

configurationBuilder.AddEnvironmentVariables()

其他配置源

1.除了上面介绍的配置文件读取配置,命令行读取配置,环境变量读取配置外,还支持ini、xml等格式的配置源。

2.还支持在运行时、调试时加载不同的json文件。

3.还内置或者第三方支持中心化配置服务器,比如使用Apollo、Nacos等开源服务器,或者使用Azure、阿里云等的配置服务。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值