net:实现自定义配置提供程序并支持重新加载/刷新

问题描述 投票:0回答:1

我正在为

net6.0
及更高版本编写自定义配置提供程序,扩展
Microsoft.Extensions.Configuration.ConfigurationProvider
。我已经实现了
Load()
方法(调用远程源,标记化配置键值并将字典保存到
Data
属性) - 非常简单的实现。

现在我正在考虑改进实施以更好地支持

IOptionsMonitor<T>
IOptionsSnapshot<T>
,但我找不到任何详细描述这一点的文档。我的配置源不支持推送机制,所以我能做的最好的就是轮询。 (虽然付出更大的努力,推也能实现)

有像

GetReloadToken
OnReload
这样的方法,但我很难理解这些方法的调用者以及选项的生命周期(分别是其配置源)。

这一切是如何运作的?可重载配置源的流程是怎样的?

internal sealed class MyLittleConfigurationProvider : ConfigurationProvider
{
    private readonly ConfigFetcher _configFetcher;

    public MyLittleConfigurationProvider(IDataClient client)
    {
        _configFetcher= new SecretsFetcher(client);
    }

    public override void Load()
    {
        var config = _configFetcher.GetConfig().GetAwaiter().GetResult();
        var data = // turn config to dictionary

        Data = data;
    }
}
asp.net-core .net-core configuration
1个回答
0
投票

您可以像下面一样使用

IOptionsMonitor
。如果您修改
appsettings.json
中的设置,它将检测到更改。

public class FileLoggerProvider : LoggerProviderBase
{
    protected FileLoggerOptions? Options;

    public FileLoggerProvider(IOptionsMonitor<FileLoggerOptions> options) : this(options.CurrentValue)
    {
        SettingsChangeToken = options.OnChange(opt => { Options = opt; });
    }

    public FileLoggerProvider(FileLoggerOptions options)
    {

        Options = options;
        Interval = GetInterval(options.Interval);

        Start();
    }

    /// <inheritdoc />
    protected override QueueWriterBase CreateQueueWriter()
    {
        var filenamePattern = Options?.Path ?? "log-{yyyyMMdd}.txt";
        var logPath = filenamePattern.FormatWithDate(DateTimeKind.Utc);
        logPath = Path.GetFullPath(logPath);
        return new FileQueueWriter(logPath);
    }
}

请检查此线程中的存储库,其中有详细的代码。它有一些问题我已经解决了,你还需要检查我的答案。然后你就会知道如何使用它。

ILoggerProvider - 一个获取配置,另一个不获取(或获取另一个)

© www.soinside.com 2019 - 2024. All rights reserved.