ASP。净心自定义配置源的案例分析

  介绍

这篇文章将为大家详细讲解有关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,最终以配置对象提供给程序使用。

 ASP。净心自定义配置源的案例分析

默认情况下,配置对象的提供者属性包含如下提供者:

 ASP。净心自定义配置源的案例分析

<李>

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。净心自定义配置源的案例分析