微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决注册额外的配置文件 .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 举报,一经查实,本站将立刻删除。