首页 > 解决方案 > 如何在另一个 IOptions<> 重新加载时动态重新加载 IOptions<>

问题描述

想象一下:

public class FooOptions { 
  public string FooProperty {get; set;}
}

public class BarOptions { 
  public string BarProperty {get; set;}
}

public class ConfigureBarOptions : IConfigureOptions<BarOptions> {
  private readonly IOptionsMonitor<FooOptions> _fooOptionsMonitor;

  public ConfigureBarOptions(IOptionsMonitor<FooOptions> fooOptionsMonitor) {
    _fooOptionsMonitor = fooOptionsMonitor;
  }

  public void Configure(BarOptions options) {
    options.BarProperty = _fooOptionsMonitor.CurrentValue.FooProperty;
  }
}

// in Startup.cs - bind to a configuration provider that is set to reload
services.Configure<FooOptions>(Configuration);

当 FooOptions 由于底层配置更新而重新加载时,如何触发 BarOptions 的重新加载?

我已经尝试过各种尝试注册某些版本:

services.AddSingleton<IOptionsChangeTokenSource<BarOptions>>(new ConfigurationChangeTokenSource<BarOptions>(name, config));

我也尝试过使用 ChangeToken 或 _fooOptionsMonitor.OnChange 的方法,但似乎没有得到正确的实现。

标签: c#.net-coreioptionsmonitor

解决方案


推荐阅读