翼度科技»论坛 编程开发 .net 查看内容

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

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
2. 配置添加

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


IConfigurationBuilder 接口定义如下:
  1. public interface IConfigurationBuilder{
  2.     // 存放用于该 Builder 的 Sources 列表中各个元素的共享字典
  3.     IDictionary<string, object> Properties { get; }
  4.     // 已注册的 IConfigurationSource 列表
  5.     IList<IConfigurationSource> Sources { get; }
  6.     // 将 IConfigurationSource 添加到 Sources 中
  7.     IConfigurationBuilder Add(IConfigurationSource source);
  8.         // 通过 Sources 构建配置提供程序实例,并创建 IConfigurationRoot 实例
  9.         IConfigurationRoot Build();
  10. }
复制代码
而它的实现类 ConfigurationBuilder 就是配置系统的入口。
  1. public class ConfigurationBuilder : IConfigurationBuilder
  2. {
  3.     public IList<IConfigurationSource> Sources { get; } = new List<IConfigurationSource>();
  4.     public IDictionary<string, object> Properties { get; } = new Dictionary<string, object>();
  5.     public IConfigurationBuilder Add(IConfigurationSource source)
  6.     {
  7.         if (source == null)
  8.         {
  9.             throw new ArgumentNullException(nameof(source));
  10.         }
  11.         Sources.Add(source);
  12.         return this;
  13.     }
  14.     public IConfigurationRoot Build()
  15.     {
  16.         var providers = new List<IConfigurationProvider>();
  17.         foreach (IConfigurationSource source in Sources)
  18.         {
  19.             IConfigurationProvider provider = source.Build(this);
  20.             providers.Add(provider);
  21.         }
  22.         return new ConfigurationRoot(providers);
  23.     }
  24. }
复制代码
当我们启动一个 ASP.NET Core应用的时候是创建并启动了一个Web主机,由 Web 主机来启动并管理我们的应用的生命周期,在这个过程中会默认添加一些配置提供程序,加载一些配置信息。这些操作就在以下代码中:
  1. var builder = WebApplication.CreateBuilder(args);
复制代码
.NET Core 框架下的主机除了适用于 Web 应用的 Web 主机之外,还有通用主机。若是在普通的控制台应用程序,想要通过主机启动应用,并使用配置系统可用以下方式:
(1) 添加 Microsoft.Extensions.Hosting Nuget 包
(2) 通过以下代码创建主机
  1. using IHost host = Host.CreateDefaultBuilder(args).Build();
  2. host.Run();
复制代码
主机这块就先稍微了解以下,后面还会有专门的文章去介绍。除了通过主机的方式使用配置系统之外,我们也可以直接通过 ConfigurationBuilder 类构建,如下:
  1. IConfiguration config = new ConfigurationBuilder()
  2.     .AddJsonFile("appsettings.json")
  3.     .Build();
  4. 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 应用之中,可以通过以下方式进行添加:
  1. // 添加一个xml配置文件,并加入到配置系统中
  2. var configirationFilePath = Path.Combine(Directory.GetCurrentDirectory(), "xxx.xml");
  3. builder.Configuration.AddXmlFile(configirationFilePath);
复制代码
也可以通过以下方式:
  1. builder.WebHost.ConfigureAppConfiguration(builder =>
  2. {
  3.     builder.AddXmlFile("");
  4. });
复制代码
这两种方式是一样的效果的,只不过具体的实现类不同,ConfigureAppConfiguration 可以将原有的配置提供程序情况,而 builder.Configuration 则不行,只能往集合后面继续添加。


参考文章:
ASP.NET Core 中的配置 | Microsoft Learn
配置 - .NET | Microsoft Learn
理解ASP.NET Core - 配置(Configuration)


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

来源:https://www.cnblogs.com/wewant/archive/2023/03/06/17110740.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具