zoukankan      html  css  js  c++  java
  • 配置框架

    一 组件包

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

    二 核心接口

    • IConfiguration
    • IConfigurationRoot
    • IConfigurationSection
    • IConfigurationBuilder

    示例演示

                IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
    
                configurationBuilder.AddInMemoryCollection(new Dictionary<string, string>
                {
                    { "key1","vaule1"},
                    { "section:key2","vaule2"}
                });
    
                IConfigurationRoot configurationRoot = configurationBuilder.Build();
    
                IConfigurationSection section = configurationRoot.GetSection("section");

    三 扩展点

    • IConfigurationSource
    • IConfigurationProvider

    四 命令行配置

    添加组件包:Microsoft.Extensions.Configuration.CommandLine

    命令行支持格式

    • key=value
    • --key=value
    • --key value
    • /key=value
    • /key value

    示例演示

                IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
    
                configurationBuilder.AddCommandLine(args);
    
                IConfigurationRoot configurationRoot = configurationBuilder.Build();
    
                Console.WriteLine(configurationRoot["key1"]);

    四 环境变量配置

    添加组件包:Microsoft.Extensions.Configuration.EnvironmentVariables

    对于配置分层键,支持用“__”替换“:”

    示例演示

                IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
    
                configurationBuilder.AddEnvironmentVariables();
    
                IConfigurationRoot configurationRoot = configurationBuilder.Build();
    
                Console.WriteLine(configurationRoot["key1"]);

    五 文件配置

    官方支持以下文件配置

    • Microsoft.Extensions.Configuration.Ini
    • Microsoft.Extensions.Configuration.Json
    • Microsoft.Extensions.Configuration.Xml
    • Microsoft.Extensions.Configuration.UserSecrets

    Json示例演示

                IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
    
                //optional false 文件不存在抛出异常
                //reloadOnChange true 文件发生变化时,重新加载配置
                configurationBuilder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
    
                IConfigurationRoot configurationRoot = configurationBuilder.Build();
    
                Console.WriteLine(configurationRoot["key1"]);

    六 监听配置变更

    核心方法

    IChangeToken IConfiguration.GetReloadToken()

    示例演示

                IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
    
                configurationBuilder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
    
                IConfigurationRoot configurationRoot = configurationBuilder.Build();
    
                Console.WriteLine($"key1:{configurationRoot["key1"]}");
    
                //监听配置变更
                ChangeToken.OnChange(() => configurationRoot.GetReloadToken(), () => {
    
                    Console.WriteLine($"key1 changed:{configurationRoot["key1"]}");
                });
    
                Console.ReadLine();

    七 强类型绑定

    组件包

    • Microsoft.Extensions.Configuration.Binder

    示例演示

                IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
    
                configurationBuilder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
    
                IConfigurationRoot configurationRoot = configurationBuilder.Build();
    
                Config config = new Config();
    
                /*
                 * json配置文件
                 * {"Config": {"key1": 1,"key2": 2,"key3": "value3","key4": "value4" } }            
                */
    
                //BindNonPublicProperties true 允许设置私有属性
                configurationRoot.GetSection("Config").Bind(config, configureOptions: options => { options.BindNonPublicProperties = true; });
    
                Console.WriteLine(JsonConvert.SerializeObject(config));

    八 选项框架

    示例演示

            public void ConfigureServices(IServiceCollection services)
            {
                //选项注入
                services.Configure<Config>(Configuration.GetSection("Config"));
                services.AddMvc();
            }
        public class HomeController : Controller
        {
            private readonly IOptions<Config> _configOptions;
            public HomeController(IOptions<Config> options)
            {
                _configOptions = options;
            }
    
            [HttpGet]
            public string Index()
            {
                return _configOptions.Value.ConnStr;
            }
        }

    选项配置热更新

    • IOptionsSnapshot 作用域生命周期使用
    • IOptionsMonitor 单例生命周期使用

    九 选项验证

    委托验证示例演示

    services.AddOptions<Config>()
                    .Configure(options => Configuration.Bind(options))
                    .Validate(option =>
                {
                    return !string.IsNullOrWhiteSpace(option.ConnStr);
                }, "字符串不能为空");
  • 相关阅读:
    android模拟器速度问题
    input.nextLine() 问题出错!
    android中的“visible ”、“invisible”、“gone”的区别(转载)
    为什么匿名内部类参数必须为final类型(转载)
    转载------------------关于android的一些技巧
    关于数据库的数据类型
    关于几个新的快捷键
    目标

    巨大bug
  • 原文地址:https://www.cnblogs.com/Lv2014/p/13932617.html
Copyright © 2011-2022 走看看