配置提供程序
TSource source = new TSource();
if (configureSource != null)
configureSource(source);
return builder.Add((IConfigurationSource) source);
以上是一个配置提供程序扩展的主要逻辑
总之就是实例化 IConfigurationSource 并用自己的配置方法初始化,然后使用 Add 添加到 ConfigurationBuilder 中 ( IList<Srouce>
)
为何Builder.Configuration既可以添加配置,也可以获取配置?
因为他的类型 ConfigurationManagerment,实现了 IConfiguration、IConfigurationBuilder 接口。
自定义配置添加程序
假设我们需要从数据库获取配置项。
- 实现数据源类
EFConfigurationSource
使用 build 方法获取配置提供类 - 实现支持类
EFConfigurationProvider
主要实现写入配置读区配置的方法。 - 实现扩展方法
强类型访问(选项模式)
使用 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.