Post

配置提供程序

TSource source = new TSource();
if (configureSource != null)
  configureSource(source);
return builder.Add((IConfigurationSource) source);

以上是一个配置提供程序扩展的主要逻辑

总之就是实例化 IConfigurationSource 并用自己的配置方法初始化,然后使用 Add 添加到 ConfigurationBuilder 中 ( IList<Srouce> )

为何Builder.Configuration既可以添加配置,也可以获取配置?

因为他的类型 ConfigurationManagerment,实现了 IConfiguration、IConfigurationBuilder 接口。

自定义配置添加程序

假设我们需要从数据库获取配置项。

  1. 实现数据源类 EFConfigurationSource 使用 build 方法获取配置提供类
  2. 实现支持类 EFConfigurationProvider 主要实现写入配置读区配置的方法。
  3. 实现扩展方法

强类型访问(选项模式)

使用 GetSection().Bind/Get<T>() 将配置项绑定到强类型实例中。

下面是直接将配置添加到服务容器 IOptions<TOptions>

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

builder.Services.Configure<TOptions>(
    builder.Configuration.GetSection(
        key: nameof(TOptions)));

这样可以将 IOptions<Toptions> 进行依赖注入。

但是 IOptions 只会保存配置文件原始状态,不会跟踪变化。

使用 IOptionsSnapshot / IOptionsMonitor 可以提供更丰富的功能。

This post is licensed under CC BY 4.0 by the author.