• .NET CORE中的配置系统


    1.在.NET CORE中读取json文件
    需要用到的NuGet包:Microsoft.Extensions.Configuration 、Microsoft.Extensions.Configuration.Json
    2.读取配置的方法
    ConfigurationBuilder configBuilder = new ConfigurationBuilder();
    configBuilder.AddJsonFile(path:"json1.json", optional:true,reloadOnChange:true)//绑定json 文件 optionl 表示文件是否可选,reloadOnChange文件发生修改是否重新加载配置
    var config = configBuilder.Build(); //构建
    //读取json文件
    Console.WriteLine(config.GetValue("name:age"));
    Console.WriteLine(config.GetSection("name:age").Value);
    Console.WriteLine(config["name:age"]);
    //将json文件转化成实体类进行读取
    var pro= config.GetSection("proxy").Get();
    2.使用DI进行配置读取json文件
    需要安装的NuGe包:Microsoft.Extensions.Options 、Microsoft.Extensions.Configuration.Binder、Microsoft.Extensions.Configuration 、Microsoft.Extensions.Configuration.Json
    读取配置时 DI要声明IOptions(不会渎取到新的配置)、IOptionsMonitor(总是读取到新的配置)、IOptionsSnapshot(在同一个scope中读到的配置相同,推荐)等类型
    //注册options AddJsonFileConfig

    services.AddJsonFileConfig();
    services.AddOptions().Configure<ServerProxy>(e => config.GetSection("proxy").Bind(e));
    
     public class JsonFileService : IConfigService
        {
            private readonly IOptionsSnapshot<ServerProxy> optionConfig;
    
            public JsonFileService(IOptionsSnapshot<ServerProxy> optionConfig)
            {
               this.optionConfig = optionConfig;
            }
            public string GetValue()
            {
                //Console.WriteLine(optionConfig.Value.Address);
                //Console.WriteLine(optionConfig.Value.Port);
                return optionConfig.Value.Address;
            }
        }
      //进行调用
    using (ServiceProvider sp = services.BuildServiceProvider())
    {
    	while (true)
    	{
    		//var sss= sp.GetService<IConfigService>();//在同一个scope中修改文件不会立即生效
    		using (var c = sp.CreateScope())
    		{
    			var sss = c.ServiceProvider.GetService<IConfigService>();
    			Console.WriteLine(sss.GetValue() + "*********1");
    			Console.ReadKey();
    			Console.WriteLine(sss.GetValue() + "*********2");
    		}
    		Console.ReadKey();
    	}
    
    }
    

    3.从命令行参数中读取配置信息
    需要用到的NuGet包 Microsoft.Extensions.Configuration.CommandLine
    //注册服务
    configBuilder.AddCommandLine(args);
    //注释掉json文件的配置
    //configBuilder.AddJsonFile(path:"json1.json", optional:true,reloadOnChange:true);//绑定json 文件 设置可选项
    //配置绑定实体
    services.AddOptions().Configure(e => config.GetSection("proxy").Bind(e));

     public class CmdService : IConfigService
        {
            private readonly IOptionsSnapshot<ServerProxy> optionConfig;
    
            public CmdService(IOptionsSnapshot<ServerProxy> optionConfig)
            {
               this.optionConfig = optionConfig;
            }
            public string GetValue()
            {
                //Console.WriteLine(optionConfig.Value.Address);
                //Console.WriteLine(optionConfig.Value.Port);
                return optionConfig.Value.Address;
            }
        }
    

    //进行调用

    using (ServiceProvider sp = services.BuildServiceProvider())
    {
    	while (true)
    	{
    		//var sss= sp.GetService<IConfigService>();//在同一个scope中修改文件不会立即生效
    		using (var c = sp.CreateScope())
    		{
    			var sss = c.ServiceProvider.GetService<IConfigService>();
    			Console.WriteLine(sss.GetValue() + "*********1");
    			Console.ReadKey();
    			Console.WriteLine(sss.GetValue() + "*********2");
    		}
    		Console.ReadKey();
    	}
    
    }
    

    //命令行传参要对参数进行扁平化处理
    //通过命令行启动 传入参数dotnet ConsoleAppMailSender.dll proxy:address=10000 proxy:port=3000
    //也可以在项目-->属性-->调试-->常规-->命令行参数 进行配置
    4.从环境变量中读取配置
    需要安装的NuGet包:Microsoft.Extensions.Configuration.EnvironmentVariables
    configBuilder.AddEnvironmentVariables();//从VS环境变量中读取配置信息(避免修改系统环境变量导致系统出问题) 项目属性--》调试--》环境变量 也是扁平化配置
    services.AddOptions().Configure(e => config.GetSection("proxy").Bind(e));

  • 相关阅读:
    PC-CSS-默认字体样式
    PC--CSS维护
    PC--CSS技巧
    PC--CSS优化
    PC--CSS命名
    PC--CSS常识
    Base64与MIME和UTF-7
    Base64算法与多版本加密技术
    Base64算法与MD5加密原理
    log4j的使用
  • 原文地址:https://www.cnblogs.com/wilsonNet/p/16423835.html
Copyright © 2020-2023  润新知