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);
                }, "字符串不能为空");
  • 相关阅读:
    解决SharePoint 文档库itemadded eventhandler导致的上传完成后,编辑页面保持报错的问题,错误信息为“该文档已经被编辑过 the file has been modified by...”
    解决SharePoint 2013 designer workflow 在发布的报错“负载平衡没有设置”The workflow files were saved but cannot be run.
    随机实例,随机值
    Spring4笔记
    struts2笔记(3)
    struts2笔记(2)
    获取文本的编码类型(from logparse)
    FileUtil(from logparser)
    DateUtil(SimpleDateFormat)
    struts2笔记
  • 原文地址:https://www.cnblogs.com/Lv2014/p/13932617.html
Copyright © 2011-2022 走看看