首页 > 编程语言 >03C# 从命令行或环境变量读取配置

03C# 从命令行或环境变量读取配置

时间:2023-12-14 09:55:41浏览次数:33  
标签:03 读取 C# public Proxy 命令行 环境变量 string

前面几篇文章主要讲解读取Json文件,这篇文章讲解如何通过命令行和环境变量读取配置

安装Nuget包:Micosoft.Extensions.Configuration.CommandLine(命令行读取)

安装Nuget包:Micosoft.Extensions.Configuration.EnvironmentVariables(环境变量读取)

配置命令行参数:

 配置环境变量参数:

 

扁平化配置:对于像命令行参数和环境变量输入等简单的键值结构,如何需要配置复杂嵌套的数据结构,需要对数据进行扁平化处理
1)层级结构属性:使用A:B:C
2)层级结构数组:使用A:B:0,A:B:1,。。。(0,1,2代表集合索引)

添加与配置相对应的实体类

 public class WebConfig
 {
     public string Name { get; set; }
     public string Age { get; set; }

     public Proxy Proxy { get; set; }

     public override string ToString()
     {
         return $"Name:{Name},Age:{Age},{Proxy.ToString()}";
     }
 }

 public class Proxy
 {
     public string Address { get; set; }
     public string Port { get; set; }

     public List<int> Ids { get; set; } = new List<int>();

     public override string ToString()
     {
         string str = null;
         for (int i = 0; i < Ids.Count; i++)
         {
             str += "Id" + i + "=" + Ids[i];
         }
         return $"Address:{Address},Port:{Port},{str}";
     }
 }

Test1Mode是注入了Proxy的实体类,Test2Mode是注入了WebConfig的实体类

 public class Test1Model
 {
     private readonly IOptionsSnapshot<Proxy> optionsSnapshot;

     public Test1Model(IOptionsSnapshot<Proxy> optionsSnapshot)
     {
         this.optionsSnapshot = optionsSnapshot;
     }

     public void Test()
     {
       Proxy proxy=  this.optionsSnapshot.Value;
         Console.WriteLine(proxy.ToString());
        
     }
 }

 public class Test2Model
 {
     private readonly IOptionsSnapshot<WebConfig> _snapshot;

     public Test2Model(IOptionsSnapshot<WebConfig> snapshot)
     {
         _snapshot = snapshot;
     }
     public void Test()
     {
         WebConfig config = _snapshot.Value;
         Console.WriteLine(config.ToString()) ;
     }
 }

Main方法如下:

 static void Main(string[] args)
 {
     ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
     //configurationBuilder.AddCommandLine(args);
     configurationBuilder.AddEnvironmentVariables();
     IConfigurationRoot config=configurationBuilder.Build();

     ServiceCollection services = new ServiceCollection();
     services.AddScoped<Test1Model>();
     services.AddScoped<Test2Model>();

     services.AddOptions().Configure<Proxy>(options => config.GetSection("Proxy").Bind(options));
     services.AddOptions().Configure<WebConfig>(e=>config.Bind(e));

     using(var service = services.BuildServiceProvider())
     {
       var test1=  service.GetRequiredService<Test1Model>();
         test1.Test();

         var test2=service.GetRequiredService<Test2Model>();
         test2.Test();
     }


     
     
 }

总结,命令行读取和环境变量读取与上篇文章Json读取主要的差别是,安装的nuget包不同,数据的配置不同,然后在主函数中,

命令行通过:configurationBuilder.AddCommandLine(args);

环境变量通过: configurationBuilder.AddEnvironmentVariables();

其它并没有什么区别

 

标签:03,读取,C#,public,Proxy,命令行,环境变量,string
From: https://www.cnblogs.com/yxh33/p/17900514.html

相关文章

  • pytest框架中conftest.py的作用
    conftest.py是pytest框架中的一个特殊文件。它允许你为测试提供自定义的配置和钩子函数。以下是conftest.py的主要作用:提供全局配置:你可以在conftest.py中定义全局的配置,然后在多个测试文件中重用这些配置。定义钩子函数:钩子函数是pytest的一个重要特性,它允许你在测试的......
  • 八、fact变量和魔法变量
    八、fact变量和魔法变量8.1fact简介​ Ansible在执行playbook的时候,第一个任务会自动执行setup模块,该模块用于获取远程主机的系统信息,并将这些信息存储在facts变量中,在playbook中可以随时调用这些变量。我们可以执行adhoc获取一下fact变量,看看都有什么。ansiblenode1-mset......
  • 02C#选项方式(Options)读取配置
    上篇文章的讲解,配置文件可以转换成实体类,这篇文章讲解如何通过选项方式结合依赖注入进行配置目的:实体类可以通过依赖注入获取配置文件映射的实体类1)安装Nuget包:Microsoft.Extensions.Options2)配置Json文件于实体类的映射并注册到容器中3)实体类通过构造函数注入配置类,有3种方式......
  • 八、后代组件数据双向Provide和Consume
    祖宗组件向后代组件传递数据并实现数据的双向绑定,即:祖宗组件的数据改变则后代组件的数据也跟着变化,后代组件数据变化则祖宗组件的数据也跟着变化。这里需要在祖宗中使用@Provide装饰器,后代组件需要使用@Consume装饰器以下代码说明了两点注意:1.祖宗组件使用@Provide,孙组件使用@C......
  • CNS0创建交货单没有WBS元素
    1、问题CNS0创建交货单带不出WBS,但是交货单过账之后,又可以读取到WBS。2、原因2.1、项目挂料创建项目挂料时,当物料为通用料,则在网络中挂料时,采购类型为网络预留当物料为专用料,则在网络中挂料时,采购类型为WBS要素预留,并显示WBS要素(此处修改通用物料为专用料,再次挂料)物料的......
  • C++ Qt开发:Slider滑块条组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍Slider滑块条组件的常用方法及灵活运用。当涉及到C++Qt开发中的Slider滑块条组件时,你可能会用到......
  • UE4 World Composition机制
    世界场景构成(WorldComposition)属于关卡流送的一种,旨在简化大型世界场景的子关卡管理,通过关卡流送的方式读取地块信息,减轻运行压力,从而实现大型世界场景的运行。与传统关卡管理方式的区别:无需手动将关卡添加到场景中,只需将关卡放置到主地图所在的目录下(可建子目录)。 主关卡(Pe......
  • 使用OpenCV看视频
    importcv2#video=cv2.VideoCapture("rtsp://192.168.0.200:554/av0_0")video=cv2.VideoCapture("fire.mp4")#获取视频帧数frame_count=int(video.get(cv2.CAP_PROP_FRAME_COUNT))#获取fps,每秒传输帧数(Framespersecond)fps=int(round(video.get(c......
  • leetcode 209. 长度最小的子数组
    题目:209.长度最小的子数组题目描述:给定一个含有n个正整数的数组和一个正整数target。找出该数组中满足其总和大于等于target的长度最小的连续子数组[numsl,numsl+1,...,numsr-1,numsr],并返回其长度。如果不存在符合条件的子数组,返回0。我的思路:这道题目暴力......
  • R语言贝叶斯Metropolis-Hastings采样 MCMC算法理解和应用可视化案例
    全文链接:https://tecdat.cn/?p=34543原文出处:拓端数据部落公众号贝叶斯MCMC模拟是一个丰富的领域,涵盖了各种算法,共同目标是近似后验模型。例如,使用的rstan包采用了一个HamiltonianMonteCarlo算法。用于贝叶斯建模的另一个rjags包采用了Gibbssampling算法。尽管细节有所不同,但......