问题描述
我有一个使用 .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 (将#修改为@)