问题描述
我正在构建一个 .NET Core 2.1 Windows 服务,它将监视 IIS 应用程序中的站点。我们需要多个配置文件,其中一个将应用于服务器内的一个网站,但不知道每台服务器上将托管多少个网站。
我希望这些文件具有使用 IOptionsMonitor
的 .NET 核心提供程序的重新加载功能,但我不确定如何在默认 Host
之外进行设置,因为这些配置没有真正适用于 Host
配置。
我考虑过实现自己的管理器并将其注册为 .AddSingleton<SiteConfigManager>()
上的 Host
。这似乎是正确的,但我不确定如何实际创建此自定义 SiteConfigManager
。这就是我正在考虑做的:
public class SiteConfigManager
{
private readonly IConfiguration _configuration;
private readonly IServiceCollection _serviceCollection;
private readonly IOptionsMonitor<DefaultSiteConfiguration> _sitesConfig;
public SiteConfigManager(IServiceCollection serviceCollection,IConfiguration configuration)
{
_serviceCollection = serviceCollection;
_configuration = configuration;
_sitesConfig = new OptionsMonitor<DefaultSiteConfiguration>(new OptionsFactory<DefaultSiteConfiguration>(new IConfigureOptions<DefaultSiteConfiguration>[0],new List<IPostConfigureOptions<DefaultSiteConfiguration>>()),new IOptionsChangetokenSource<DefaultSiteConfiguration>[1] { new ConfigurationChangetokenSource<DefaultSiteConfiguration>(_configuration) },new OptionsCache<DefaultSiteConfiguration>());
}
public IOptionsMonitor<DefaultSiteConfiguration> Configuration { get => _sitesConfig; }
public void AddConfiguration(string siteName)
{
_serviceCollection.Configure<DefaultSiteConfiguration>(siteName,_configuration);
}
}
令人失望的是我是否在此处正确使用和初始化 IOptionsMonitor
并正确配置 IServiceCollection
。
我怀疑的用法如下所示:
public class SiteMonitor : BackgroundService
{
private readonly SiteConfigManager _siteConfig;
public SiteMonitor(SiteConfigManager siteConfig)
{
_siteConfig = siteConfig;
}
public string SiteName { get; set; }
public void Monitor()
{
string value = _siteConfig.Configuration.Get(SiteName).someConfigValue;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)