[TOC] <br/><br/><br/> # <b style="color:#4F4F4F;">简介说明</b> ``` 版本:Microsoft.Extensions.Configuration 作用:dotnet core 配置框架 ``` <br/> # <b style="color:#4F4F4F;">Microsoft.Extensions.Configuration.IConfigurationBuilder</b> <br/> # <span style="color:#619BE4">SetBasePath()</span> ***** 设置基本路径地址 <br/> # <span style="color:#619BE4">Add()</span> ***** 从自定义源加载数据 <br/> ### 示例内容 <span style="color:red;">1. 举例说明</span> ``` using WebApplication.Extensions; using System; using System.Globalization; using System.Timers; using Microsoft.Extensions.Configuration; namespace WebApplication.Extensions { public class MyConfigurationProvider : ConfigurationProvider { public MyConfigurationProvider() : base() { var timer = new Timer(); timer.Elapsed += Timer_Elapsed; timer.Interval = 3000; timer.Start(); } public void Timer_Elapsed(object sender, ElapsedEventArgs e) { Load(); } public override void Load() { Data["time"] = DateTime.Now.ToString(CultureInfo.InvariantCulture); OnReload(); } } public class MyConfigurationSource : IConfigurationSource { public IConfigurationProvider Build(IConfigurationBuilder builder) { return new MyConfigurationProvider(); } } } namespace Microsoft.Extensions.Configuration { public static class MyConfigurationBuilderExtensions { public static IConfigurationBuilder AddMyConfiguration(this IConfigurationBuilder builder) { builder.Add(new MyConfigurationSource()); return builder; } } } ``` <br/> # <span style="color:#619BE4">AddInMemoryCollection()</span> ***** 从内存中加载配置对象 <br/> ### 示例内容 <span style="color:red;">1. 举例说明</span> ``` conf.AddInMemoryCollection(new Dictionary<string, string>() { {"name", "a"}, {"age", "1"}, {"section1:sex", "nv"} }); ``` <br/> # <span style="color:#619BE4">AddCommandLine()</span> ***** 从命令行中加载配置对象 <br/> ### 参数说明 <b style="color:#808080;">arg:</b> * 类型:字符串数组 * 默认值:无 * 描述:命令行内容数组 * 可选值:[ ] <b style="color:#808080;">mapper:</b> * 类型:Dictionary * 默认值:无 * 描述:映射单横向做别名 * 可选值:[ ] <br/> # <span style="color:#619BE4">AddEnvironmentVariables()</span> ***** 从环境变量中加载配置对象,不再用:分割而是__进行分割 <br/> ### 参数说明 <b style="color:#808080;">prefix:</b> * 类型:字符串 * 默认值:无 * 描述:指定环境变量前缀 * 可选值:[ ] <br/> # <span style="color:#619BE4">AddJsonFile()</span> ***** 从JSON文件中读取 <br/> ### 参数说明 <b style="color:#808080;">path:</b> * 类型:字符串 * 默认值:无 * 描述:文件路径 * 可选值:[ ] <b style="color:#808080;">optional:</b> * 类型:布尔 * 默认值:无 * 描述:文件不存在时是否报错 * 可选值:[ ] <b style="color:#808080;">reloadOnChange:</b> * 类型:布尔 * 默认值:无 * 描述:文件变更以后是否重新读取 * 可选值:[ ] <br/> # <span style="color:#619BE4">AddIniFile()</span> ***** 从INI文件中读取 <br/> # <span style="color:#619BE4">Build()</span> ***** 创建并返回IConfigurationRoot对象 <br/> ### 示例内容 <span style="color:red;">1. 举例说明</span> ``` IConfigurationBuilder builder = new ConfigurationBuilder(); builder.AddInMemoryCollection(new Dictionary<string, string> { {"key1", "value1"}, {"key2", "value2"}, {"section1:key3", "value3"} }); // 单横杠要定义别名,否则抛出异常 var mapper = new Dictionary<string, string> { {"-k1", "CommandLineKey1"} }; builder.AddCommandLine(args, mapper); // 双下划线分割节点 builder.AddEnvironmentVariables("PREFIX_"); // optional参数定义文件不存在是否报错,reloadOnChange文件变更是否重新读取文件 builder.AddJsonFile("", optional: false, reloadOnChange: true); builder.AddIniFile(""); IConfiguration config = builder.Build(); var reloadToken = config.GetReloadToken(); reloadToken.RegisterChangeCallback(state => { // 执行一次不再执行 Console.WriteLine("OnChange"); }, config); ChangeToken.OnChange(() => config.GetReloadToken(), () => { // 变更就会执行 Console.WriteLine("OnChange"); }); // BindNonPublicProperties规定私有自动也进行赋值 config.Bind(new { }, options => options.BindNonPublicProperties = true); Console.WriteLine(config["key1"]); var section = config.GetSection("section1"); Console.WriteLine(section["key3"]); ``` <br/> # <b style="color:#4F4F4F;">Microsoft.Extensions.Configuration.IConfigurationRoot</b> <br/> # <span style="color:#619BE4">Bind()</span> ***** 绑定到强类型对象上 <br/> # <span style="color:#619BE4">GetSection()</span> ***** 获取Section对象 <br/> # <span style="color:#619BE4">GetReloadToken()</span> ***** 获取IChangeToken对象 <br/> ### 示例内容 <span style="color:red;">1. 举例说明</span> ``` var builder = new ConfigurationBuilder(); builder.Add(new MyConfigurationSource()); var configRoot = builder.Build(); ChangeToken.OnChange(() => configRoot.GetReloadToken(), state =>{Console.WriteLine(state["lastTime"]);},configRoot); Console.ReadKey(); ``` <br/> # <span style="color:#619BE4">this.\[item\]()</span> ***** 根据索引查找配置项值 <br/> # <b style="color:#4F4F4F;">Microsoft.Extensions.Configuration.IConfigurationSection</b> <br/> # <span style="color:#619BE4">Bind()</span> ***** 绑定到对象上 <br/> # <span style="color:#619BE4">this.\[item\]()</span> ***** 根据索引查找配置项值 <br/> # <b style="color:#4F4F4F;">Microsoft.Extensions.Configuration.IConfigurationSource</b> <br/> # <span style="color:#619BE4">Build()</span> ***** 返回自定义IConfigurationProvider <br/> ### 示例内容 <span style="color:red;">1. 举例说明</span> ``` public class MyConfigurationSource : IConfigurationSource { public IConfigurationProvider Build(IConfigurationBuilder builder) { return new MyConfigurationProvider(); } } ``` <br/> # <b style="color:#4F4F4F;">Microsoft.Extensions.Configuration.IConfigurationProvider</b> <br/> # <span style="color:#619BE4">Data</span> ***** 数据字典 <br/> # <span style="color:#619BE4">Load()</span> ***** 加载数据 <br/> ### 示例内容 <span style="color:red;">1. 举例说明</span> ``` public override void Load() { Data["time"] = DateTime.Now.ToString(CultureInfo.InvariantCulture); } ``` <span style="color:red;">2. 命名空间中拓展ConfigurationSource</span> ``` namespace Microsoft.Extensions.Configuration { public static class MyConfigurationBuilderExtensions { public static IConfigurationBuilder AddMyConfiguration(this IConfigurationBuilder builder) { builder.Add(new MyConfigurationSource()); return builder; } } } ``` <span style="color:red;">3. 自定义ConfigurationProvider</span> ``` internal class MyConfigurationSource : IConfigurationSource { public IConfigurationProvider Build(IConfigurationBuilder builder) { return new MyConfigurationProvider(); } } internal class MyConfigurationProvider : ConfigurationProvider { public MyConfigurationProvider() { var timer = new Timer(); timer.Elapsed += Timer_Elapsed; timer.Interval = 3000; timer.Start(); } private void Timer_Elapsed(object sender, ElapsedEventArgs e) { Load(true); } public override void Load() { Load(false); } private void Load(bool reload) { Data["lastTime"] = DateTime.Now.ToString(CultureInfo.InvariantCulture); if (reload) { OnReload(); } } } ``` <br/> # <span style="color:#619BE4">OnLoad()</span> ***** 触发重新加载更改令牌并创建一个新令牌 <br/>