注册额外的配置文件 .NET Core

问题描述

我正在构建一个 .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 (将#修改为@)