网站设计做哪些的,wordpress插件 产品,越来越多大学生喜欢虚拟空间,网站上怎么做返回主页链接一、前言配置的本质就是字符串的键值对#xff0c;微软的一系列接口其实就是对这些键值对字符串的抽象。二、基本类型2.1、Nuget包Microsoft.Extensions.Configuration.AbstractionsMicrosoft.Extensions.Configuration2.2、抽象接口IConfiguration提供了查询、设置配置项、监… 一、前言配置的本质就是字符串的键值对微软的一系列接口其实就是对这些键值对字符串的抽象。二、基本类型2.1、Nuget包Microsoft.Extensions.Configuration.AbstractionsMicrosoft.Extensions.Configuration2.2、抽象接口IConfiguration提供了查询、设置配置项、监控变化等方法IConfigurationRoot在IConfiguration接口基础上增加了 Reload 方法强制从provider中重新加载配置值IConfigurationSection对配置节点的抽象IConfigurationBuilder根据提供的数据源注册并构建IConfigurationIConfigurationSource对数据源的抽象例如Json、xml、环境变量、内存变量等IConfigurationProvider规定了配置项的获取、设置、重载等统一的行为三、基本配置注各种配置方式的目的是在控制台中输出以下内容如下图3.1、加载内存中的配置需要引入包Microsoft.Extensions.Configuration主要方法builder.AddInMemoryCollection()static void Main(string[] args)
{IConfigurationBuilder builder new ConfigurationBuilder();var memoryData new Dictionarystring, string();memoryData.Add(Student:Code, 10002385);memoryData.Add(Student:Name, LiuSan);builder.AddInMemoryCollection(memoryData);IConfigurationRoot configurationRoot builder.Build();IConfigurationSection configurationSection configurationRoot.GetSection(Student);Console.WriteLine($Code:{configurationSection[Code]});Console.WriteLine($Name:{configurationSection[Name]}); Console.Read();
}
3.2、加载环境变量中的配置需要引入包Microsoft.Extensions.Configuration.EnvironmentVariables主要方法builder.AddEnvironmentVariables()环境变量中层级关系使用 __ 代替 :static void Main(string[] args)
{IConfigurationBuilder builder new ConfigurationBuilder();builder.AddEnvironmentVariables();IConfigurationRoot configurationRoot builder.Build();IConfigurationSection configurationSection configurationRoot.GetSection(Student);Console.WriteLine($Code:{configurationSection[Code]});Console.WriteLine($Name:{configurationSection[Name]});Console.Read();
}
3.3、加载命令行中的配置需要引入包Microsoft.Extensions.Configuration.CommandLine主要方法builder.AddCommandLine(args)命令行中使用--表示配置项层级关系使用:主要在docker中使用static void Main(string[] args)
{IConfigurationBuilder builder new ConfigurationBuilder();builder.AddCommandLine(args);IConfigurationRoot configurationRoot builder.Build();IConfigurationSection configurationSection configurationRoot.GetSection(Student);Console.WriteLine($Code:{configurationSection[Code]});Console.WriteLine($Name:{configurationSection[Name]});Console.Read();
}
3.4、加载Json中的配置需要引入包Microsoft.Extensions.Configuration.Json主要方法builder.AddJsonFile(appsettings.json)static void Main(string[] args)
{IConfigurationBuilder builder new ConfigurationBuilder();builder.AddJsonFile(appsettings.json);IConfigurationRoot configurationRoot builder.Build();IConfigurationSection configurationSection configurationRoot.GetSection(Student);Console.WriteLine($Code:{configurationSection[Code]});Console.WriteLine($Name:{configurationSection[Name]});Console.Read();
}
3.5、加载xml中的配置需要引入包Microsoft.Extensions.Configuration.Xml主要方法builder.AddXmlFile(appsettings.xml)xml中不会读取最外层所以Section必需从第二层开始static void Main(string[] args)
{IConfigurationBuilder builder new ConfigurationBuilder();builder.AddXmlFile(appsettings.xml);IConfigurationRoot configurationRoot builder.Build();IConfigurationSection configurationSection configurationRoot.GetSection(Student);Console.WriteLine($Code:{configurationSection[Code]});Console.WriteLine($Name:{configurationSection[Name]});Console.Read();
}
四、高级配置4.1、将配置绑定至强对象需要引入包Microsoft.Extensions.Configuration.Binder主要方法configurationRoot.GetSection(Student).Bind(student) class Program{static void Main(string[] args){IConfigurationBuilder builder new ConfigurationBuilder();builder.AddJsonFile(appsettings.json);IConfigurationRoot configurationRoot builder.Build();var student new Student();configurationRoot.GetSection(Student).Bind(student);Console.WriteLine($Code:{student.Code});Console.WriteLine($Name:{student.Name});Console.Read();}}class Student{public string Code { get; set; }public string Name { get; set; }}
4.2、IOptions需要引入包Microsoft.Extensins.Options需要引入包Microsoft.Extensions.Options.ConfigurationExtensions本质其实就是将一个Section配置节点映射到一个实体对象 class Program{static void Main(string[] args){IConfigurationBuilder builder new ConfigurationBuilder();builder.AddJsonFile(appsettings.json);IConfigurationRoot configurationRoot builder.Build();IServiceCollection services new ServiceCollection();services.ConfigureWeixinOptions(configurationRoot.GetSection(WeixinSetting));services.AddScopedIWeixinService, WeixinService();var provider services.BuildServiceProvider();var weixinService provider.GetServiceIWeixinService();string appId weixinService.AppId;string token weixinService.Token;Console.Read();}}interface IWeixinService{string AppId { get; }string Token { get; }}class WeixinService: IWeixinService{IOptionsWeixinOptions _options;public WeixinService(IOptionsWeixinOptions options){_options options;}public string AppId { get _options.Value.AppId; }public string Token { get _options.Value.Token;}}class WeixinOptions{public string AppId { get; set; }public string Token { get; set; }}
4.3、热更新IConfigurationBuilder添加数据源时设置reloadOnChangetrue监听的核心方法var token configurationRoot.GetReloadToken(); static void Main(string[] args){IConfigurationBuilder builder new ConfigurationBuilder();builder.AddJsonFile(appsettings.json, optional:false, reloadOnChange:true);IConfigurationRoot configurationRoot builder.Build();IConfigurationSection configurationSection configurationRoot.GetSection(Student);var token configurationRoot.GetReloadToken();ChangeToken.OnChange(() configurationRoot.GetReloadToken(), () {Console.WriteLine(配置发生改变了...);Console.WriteLine($Code:{configurationSection[Code]});Console.WriteLine($Name:{configurationSection[Name]});}); Console.Read();}
五、总结配置就是key-value键值对字符串IConfiguration和IConfigurationRoot是对键值对的抽象IConfigurationBuilder用于构建IConfiguration和IConfigurationRootIConfigurationSource是对数据源的抽象IConfigurationProvider将不同来源的IConfigurationSource 转为统一的模型IOptions方便将不同的配置节点(Path)映射为对应的强类型对象IConfigurationBuilder添加多个数据源IConfigurationSource后如果key重名则以最后一个配置为准(覆盖前面)