这篇文章将为大家详细讲解有关ASP。净心自定义配置源的案例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
<强>前言强>
正如大家所知,在。NET核心中配置文件改成了appsettings。json,表面上和。net框架的网络。配置或app.config好像没有太大的区别,只是一种是json,一种是xml,但其实。net核心的配置体系是一种全新的设计,灵活且具扩展性。这里主要介绍一下在。net核心的配置体系下如何扩展自定义配置源,配置源其实就是配置信息存放的载体,最常用的就是文件类型。
<强>。净核心配置体系强>
在进行自定义配置源介绍前,我们需要先了解一下。NET中核心的配置体系。NET核心的配置体系中主要包含ConfigurationProvider, ConfigurationSource, ConfigurationBuilder,配置几大核心对象。
<强> ConfigurationProvider 强>
实现IConfigurationProvider接口,配置源真正提供者,主要提供配置信息的加载与刷新。
<强> ConfigurationSource 强>
实现IConfigurationSource接口,提供对应的ConfigurationProvider具体实例。
<强> ConfigurationBuilder 强>
实现IConfigurationBuilder接口,负责将ConfigurationSource添加到配置源集合,再根据配置源集合构建出ConfigurationRoot对象,实现IConfigurationRoot接口。
<强>配置强>
实现IConfiguration接口,配置对象在逻辑上体现出树形化层次结构,配置信息均已键/值对的方式提供使用。
<强>注强>:* IConfigurationRoot IConfigurationSection均继承于IConfiguration, IConfigurationRoot表示配置的根节点,IConfigurationSection则表示配置的非根节点*
所以他们之间的关系就是ConfigurationProvider实现配置提供,然后通过ConfigurationSource构造配置源实例,接着通过ConfigurationBuilder将配置源实例ConfigurationSource添加到配置源集合中并构造出ConfigurationRoot,最终以配置对象提供给程序使用。
默认情况下,配置对象的提供者属性包含如下提供者:
- <李>
ChainedConfigurationProvider:应用程序本身相关配置信息,如:applicationName, contentRoot;
李> <李>JsonConfigurationProvider: appsettings。json和appsettings.Development。json中的配置信息;
李> <李>EnvironmentVariablesConfigurationProvider:环境变量的配置信息;
李> <李>CommandLineConfigurationProvider:命令行输入的配置信息;
李>这些类型的提供者在。net核心Web项目中默认会自动加载,不需要手动配置,当然预置的提供者并不止这几种。
<>强自定义配置源强>
前面提到。net核心的配置体系是具有扩展性的,所以我们可以实现自定义的配置源,比如基于配置中心(如:etcd,阿波罗,驻等)的实现,下面将模拟从配置中心获取,先了解整体实现方式,后面也会介绍我们在实际项目中基于etcd的实现方案。
<>强创建ConfigurationProvider 强>
自定义提供者需要继承ConfigurationProvider,然后重写负载方法,设置数据属性。
public class CustomConfigurationProvider : ConfigurationProvider { ,public override  void 负载() ,{ ,//模拟从远程配置中心获取配置信息, ,using var httpClient =new HttpClient ,{=,,BaseAddress  new Uri (“http://localhost: 5000“) ,}; ,var response =, httpClient.GetStringAsync (“/api/configs") ,.ConfigureAwait(假) ,.GetAwaiter () ,.GetResult (); (!,if  string.IsNullOrEmpty(响应)) ,{=,,Data  JsonConvert.DeserializeObject祝辞(响应); ,} ,} }
http://localhost: 5000/api/配置接口返回的json字符串,如下:
{“name":“beck",“company":“mingdao"}
<强>创建ConfigurationSource 强>
实现IConfigurationSource接口,在建造方法中返回CustomConfigurationProvider实例。
public class CustomConfigurationSource : IConfigurationSource { ,public IConfigurationProvider 构建(IConfigurationBuilder 构建器) ,{ ,return new  CustomConfigurationProvider (); ,} }ASP。净心自定义配置源的案例分析