ASP.NET Core – 配置系统之配置添加

  • ASP.NET Core – 配置系统之配置添加已关闭评论
  • 146 次浏览
  • A+
所属分类:.NET技术
摘要

配置系统可以读取到配置文件中的信息,那必然有某个地方可以将配置文件添加到配置系统中。之前的文章中讲到 ASP.NET Core 入口文件中,builder(WebApplicationBuilder 对象) 中有一个 Configuration 属性,这里就是我们扩展添加额外的配置的地方。


2. 配置添加

配置系统可以读取到配置文件中的信息,那必然有某个地方可以将配置文件添加到配置系统中。之前的文章中讲到 ASP.NET Core 入口文件中,builder(WebApplicationBuilder 对象) 中有一个 Configuration 属性,这里就是我们扩展添加额外的配置的地方。

查看 Configuration 属性,可以看到是 ConfigurationManager 类型,而 ConfigurationManager 实现了 IConfigurationBuilder 接口。

ASP.NET Core - 配置系统之配置添加

ASP.NET Core - 配置系统之配置添加

IConfigurationBuilder 接口定义如下:

public interface IConfigurationBuilder{     // 存放用于该 Builder 的 Sources 列表中各个元素的共享字典     IDictionary<string, object> Properties { get; }     // 已注册的 IConfigurationSource 列表     IList<IConfigurationSource> Sources { get; }     // 将 IConfigurationSource 添加到 Sources 中     IConfigurationBuilder Add(IConfigurationSource source); 	// 通过 Sources 构建配置提供程序实例,并创建 IConfigurationRoot 实例 	IConfigurationRoot Build(); } 

而它的实现类 ConfigurationBuilder 就是配置系统的入口。

public class ConfigurationBuilder : IConfigurationBuilder {     public IList<IConfigurationSource> Sources { get; } = new List<IConfigurationSource>();      public IDictionary<string, object> Properties { get; } = new Dictionary<string, object>();      public IConfigurationBuilder Add(IConfigurationSource source)     {         if (source == null)         {             throw new ArgumentNullException(nameof(source));         }          Sources.Add(source);         return this;     }      public IConfigurationRoot Build()     {         var providers = new List<IConfigurationProvider>();         foreach (IConfigurationSource source in Sources)         {             IConfigurationProvider provider = source.Build(this);             providers.Add(provider);         }         return new ConfigurationRoot(providers);     } } 

当我们启动一个 ASP.NET Core应用的时候是创建并启动了一个Web主机,由 Web 主机来启动并管理我们的应用的生命周期,在这个过程中会默认添加一些配置提供程序,加载一些配置信息。这些操作就在以下代码中:

var builder = WebApplication.CreateBuilder(args); 

.NET Core 框架下的主机除了适用于 Web 应用的 Web 主机之外,还有通用主机。若是在普通的控制台应用程序,想要通过主机启动应用,并使用配置系统可用以下方式:

(1) 添加 Microsoft.Extensions.Hosting Nuget 包
(2) 通过以下代码创建主机

using IHost host = Host.CreateDefaultBuilder(args).Build(); host.Run(); 

主机这块就先稍微了解以下,后面还会有专门的文章去介绍。除了通过主机的方式使用配置系统之外,我们也可以直接通过 ConfigurationBuilder 类构建,如下:

IConfiguration config = new ConfigurationBuilder()     .AddJsonFile("appsettings.json")     .Build();  config.GetValue<string>("Logging:LogLevel:Default"); 

这里需要引入相应的Nuget包,例如使用 ConfigurationBinder 相关的扩展方法就要引入 Microsoft.Extensions.Configuration.Binder Nuget包,使用 Json 格式配置文件就要引入Microsoft.Extensions.Configuration.Json Nuget包,该Nuget 包中包含 AddJsonFile 扩展方法,通过指定文件路径添加相应的配置文件到配置系统中。

配置文件多种多样,比较常用的都有 Json 、xml、ini、yaml 等多种,甚至配置信息不一定存储在文件之中。.NET Core配置系统对各种来源的配置信息进行了抽象,不同来源只要提供相应的配置提供程序即可,也就是我们上面在 IConfigurationRoot 接口中看到的 IConfigurationProvider 接口的实现类。配置提供程序内部对不同来源不同格式的配置信息进行加载、刷新,并提供统一的访问方式,也就是键值对,实际上所有的配置信息最终会以键值对的方式被读取到内存中的Dictionary对象中。

我们要添加不同类型不同来源的配置信息,只需要通过 IConfigurationBuilder 实现类对象添加不同的配置提供程序即可。在ASP.NET Core 应用之中,可以通过以下方式进行添加:

// 添加一个xml配置文件,并加入到配置系统中 var configirationFilePath = Path.Combine(Directory.GetCurrentDirectory(), "xxx.xml"); builder.Configuration.AddXmlFile(configirationFilePath); 

也可以通过以下方式:

builder.WebHost.ConfigureAppConfiguration(builder => {     builder.AddXmlFile(""); }); 

这两种方式是一样的效果的,只不过具体的实现类不同,ConfigureAppConfiguration 可以将原有的配置提供程序情况,而 builder.Configuration 则不行,只能往集合后面继续添加。

参考文章:

ASP.NET Core 中的配置 | Microsoft Learn
配置 - .NET | Microsoft Learn
理解ASP.NET Core - 配置(Configuration)

ASP.NET Core 系列:
目录:ASP.NET Core 系列总结
上一篇:ASP.NET Core - 配置系统之配置读取