You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动及手动刷新.NET 8中的IConfiguration

.NET 8中Azure Key Vault配置的自动与手动刷新方案

一、自动刷新配置

在.NET 8中,Azure Key Vault配置提供器原生支持自动刷新,只需在配置阶段启用重载并设置刷新间隔:

1. 配置Azure Key Vault时启用自动刷新

在Program.cs中配置Key Vault时,通过AzureKeyVaultConfigurationOptions开启自动刷新:

var builder = WebApplication.CreateBuilder(args);

builder.Configuration.AddAzureKeyVault(
    new Uri("https://你的密钥保管库名称.vault.azure.net/"),
    new DefaultAzureCredential(),
    new AzureKeyVaultConfigurationOptions
    {
        // 设置自动刷新间隔(示例为1小时)
        ReloadInterval = TimeSpan.FromHours(1),
        // 启用变更重载
        ReloadOnChange = true
    });

// 注册配置类,使用IOptionsSnapshot/IOptionsMonitor获取最新值
builder.Services.Configure<MySettings>(builder.Configuration.GetSection("MySettings"));

var app = builder.Build();

2. 正确获取刷新后的配置

不能使用IOptions<T>(单例模式,不会自动更新),需使用:

  • IOptionsSnapshot:范围作用域,每次请求都会获取最新配置值
  • IOptionsMonitor:全局作用域,可主动监听配置变更事件

示例服务中使用IOptionsMonitor<T>:

public class MyService
{
    private readonly IOptionsMonitor<MySettings> _settingsMonitor;

    public MyService(IOptionsMonitor<MySettings> settingsMonitor)
    {
        _settingsMonitor = settingsMonitor;
        // 可选:监听配置变更事件
        _settingsMonitor.OnChange(settings => 
        {
            // 配置变更后的处理逻辑
            Console.WriteLine("配置已更新");
        });
    }

    public void DoSomething()
    {
        // 获取最新配置值
        var latestSettings = _settingsMonitor.CurrentValue;
        // ... 业务逻辑
    }
}

二、手动刷新配置

通过IConfigurationRoot的Reload()方法手动触发配置刷新,步骤如下:

1. 获取IConfigurationRoot实例

在需要触发刷新的地方(如API控制器),将注入的IConfiguration转换为IConfigurationRoot:

[ApiController]
[Route("api/config")]
public class ConfigController : ControllerBase
{
    private readonly IConfigurationRoot _configRoot;

    public ConfigController(IConfiguration configuration)
    {
        _configRoot = (IConfigurationRoot)configuration;
    }

    [HttpPost("refresh")]
    public IActionResult ManualRefresh()
    {
        // 触发手动刷新
        _configRoot.Reload();
        return Ok("配置已手动刷新完成");
    }
}

2. 手动刷新后的联动

调用Reload()后,配置系统会触发变更事件,所有依赖IOptionsMonitor<T>的服务都会自动获取最新配置值,无需额外处理。

注意事项

  • 权限要求:应用需拥有Azure Key Vault的Secret Get和Secret List权限,确保能读取密钥并检测变更
  • 刷新间隔:自动刷新间隔不宜过短,避免频繁调用Azure Key Vault API导致限流或额外开销
  • 依赖版本:确保使用的Azure.Extensions.AspNetCore.Configuration.Secrets包版本兼容.NET 8,推荐使用最新稳定版

内容的提问来源于stack exchange,提问作者Jck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 00:21:07