【问题标题】:IConfiguration with IOptions - How to reload configuration from external source in every request scopeIConfiguration with IOptions - 如何在每个请求范围内从外部源重新加载配置
【发布时间】:2020-06-24 21:11:19
【问题描述】:

目标

我想开发一个基于运行时值 (tenantId) 从外部 Web 服务实时获取其配置的应用程序。这意味着对于每个请求/范围,都应该重新加载配置。第一步,不需要配置缓存

方法/想法/问题

  1. 由于 dotnet core 提供了与选项模式配合良好的IConfiguration 接口,我想知道上述是否可以通过自定义ConfigurationProvider 实现,该ConfigurationProvider 处理每个请求的配置负载,而应用程序的其余部分注入@ 987654323@ 获取配置。
    • 我最初的想法是使用在每个请求中触发重新加载的中间件,但这似乎有点不合时宜,可能不是最好的方法?
  2. 根据我的要求,对于将在运行时获取配置的每个选项使用带有自定义IConfigureOptions 实现的选项模式而不是使用自定义ConfigurationProvider 会更好吗?
    • 在这种情况下,如何克服外部类库请求 IConfigurationSection 来获取其配置的情况?
  3. 最好避免使用上述任何方法,而只使用需要配置值的任何服务注入的自定义服务?
    • 这将允许对处理配置和缓存进行更多控制,但这意味着此自定义配置服务将在整个应用程序中传播,而不是使用标准 IConfiguration。我猜这可能没问题,但我们必须再次处理使用 IConfiguration 的外部库。
  4. 是否还有其他我未列出的推荐方法,并且您认为更适合我的要求?

非常感谢任何帮助

【问题讨论】:

    标签: c# .net-core configuration


    【解决方案1】:

    我最终采用了一种混合方法,其中我不使用ConfigurationProvider,但仍使用IConfiguration 接口来处理配置。我遵循的方法是:

    1. IConfiguration 接口仍用于配置不同的配置提供程序
    2. IOptionsSnapshot<ConfigClassOptions> 被注入到应用程序的所有需要​​配置值的部分
    3. 在授权中间件之后执行的中间件,从请求的头部读取运行时值,然后根据运行时值获取相应的配置,并通过直接在IConfiguration实例上添加相应的键值来覆盖配置。 IConfiguration[key]=value;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-23
      • 2011-06-23
      • 2011-09-30
      • 2023-03-15
      • 1970-01-01
      • 2018-11-30
      相关资源
      最近更新 更多