如何解决多租户配置 IOptionsMonitor 重载
我有一个使用 .NET Core 2.1 的 Windows 服务,它负责读取多个 .json
配置文件来处理它在 IIS 中监控的网站的不同配置。我正在尝试查看重新加载配置是否有效,但每次我在进行更改后查看类型配置时,我都看不到更改。
IHostBuilder host = Host
.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context,builder) =>
{
// Site Configuration
foreach (IISWebsite site in _siteRepository.Sites.OrderBy(x => x.Name))
{
builder.AddJsonFile($"{site.SiteConfigFile}",false,true);
}
})
.ConfigureServices((context,serviceCollection) =>
{
foreach (IISWebsite site in _siteRepository.Sites.OrderBy(x => x.Name))
{
serviceCollection.Configure<SiteConfiguration>(site.Name,context.Configuration.GetSection("SiteConfig"));
}
}
我基本上是在 _siteRepository.Sites
中为每个 IIS 网站添加所有配置文件,然后尝试使用相应的文件配置每个键入的 SiteConfiguration
。这是正确的做法吗?
例如
在尝试测试配置时,我使用 .Get(name)
method 获取我配置的特定站点名称的配置。 .Get(name)
是否像 .CurrentValue
一样提供配置的当前值?
例如。 SiteName
的值在以下示例之外填充,并在 ExecuteAsync
运行时已知。
public class Monitor : BackgroundService
{
private readonly IOptionsMonitor<SiteConfiguration> _siteConfig;
public Monitor(IOptionsMonitor<SiteConfiguration> config)
{
_siteConfig = config;
}
public string SiteName { get; set; }
public override async Task ExecuteAsync(CancellationToken stoppingToken)
{
string a = string.Empty; // Put a breakpoint here,inspect the value below,then change config
string unchangedConfig = _siteConfig.Get(SiteName).ConfigValue;
string b = string.Empty; // Put a breakpoint here,inspect the value above,no change.
}
}
配置值没有任何变化,我不知道为什么。
我什至覆盖了 OnChange
方法并且它确实受到了攻击(不止一次,但我认为这应该发生)但我所做的更改从未存在。我还注意到 OnChange
方法的字符串参数具有不同的命名选项,即使我只更改了其中一个站点的配置文件。
public Monitor(IOptionsMonitor<SiteConfiguration> config)
{
_siteConfig = config;
_siteConfig.OnChange((configuration,s) =>
{
Console.WriteLine($"{s} website's config changed"); // This will have s with all the different register named options.
});
{
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。