IConfiguration with IOptions - Как перезагрузить конфигурацию из внешнего источника в каждой области запроса - PullRequest
0 голосов
/ 16 июня 2020

Цель

Я хотел бы разработать приложение, которое извлекает свои конфигурации в реальном времени из внешней веб-службы на основе значения времени выполнения (tenantId). Это означает, что для каждого запроса / области необходимо перезагрузить конфигурации. В качестве первого шага кэширование конфигурации не требуется.

Подход / Мысли / Вопросы

  1. Поскольку ядро ​​do tnet предоставляет работающий интерфейс IConfiguration Хорошо с шаблоном параметров. Мне было интересно, достижимо ли вышеперечисленное с помощью пользовательского ConfigurationProvider, который имеет дело с загрузкой конфигурации по запросу, в то время как остальная часть приложения вводит IOptionsSnapshot<> для получения конфигурации.
    • Моя первоначальная мысль заключалась в том, чтобы использовать промежуточное ПО, которое запускает перезагрузку при каждом запросе, но это кажется немного хакерским и, вероятно, не лучшим подходом?
  2. Для моего требований, не лучше ли было бы просто использовать шаблон параметров с настраиваемой реализацией IConfigureOptions для каждого параметра, который будет извлекать конфигурацию во время выполнения, вместо использования настраиваемого ConfigurationProvider?
    • В этом случае, как я могу преодолеть сценарий ios, в котором внешние библиотеки классов запрашивают IConfigurationSection для получения их конфигурации?
  3. Не лучше ли избежать любого из вышеперечисленных подходов и просто использовать настраиваемую службу, которая будет внедрена любой службой, требующей значения конфигурации?
    • Это позволит получить больший контроль над конфигурацией и кешем, но это означает, что эта настраиваемая служба конфигурации будет распространяться внутри всего приложения вместо использования стандартной IConfiguration. Думаю, это могло бы быть нормально, но опять же, мы должны иметь дело с внешними библиотеками, которые используют IConfiguration.
  4. Есть ли другой рекомендуемый подход, который я не перечислил, и вы считаете лучшим вариантом для моего требования?

Любая помощь приветствуется

1 Ответ

0 голосов
/ 24 июня 2020

В итоге я выбрал гибридный подход, в котором я не использую ConfigurationProvider, но все же использую интерфейс IConfiguration для работы с конфигурациями. Я придерживался следующего подхода:

  1. Интерфейс IConfiguration по-прежнему используется для настройки различных поставщиков конфигурации
  2. IOptionsSnapshot<ConfigClassOptions> вводится во все части приложения, которым требуются значения конфигурации.
  3. Промежуточное ПО, выполняемое сразу после промежуточного ПО авторизации, считывает значение времени выполнения из заголовка запроса, затем выбирает соответствующие конфигурации на основе значения времени выполнения и отменяет конфигурации, добавляя соответствующие значения ключей непосредственно в * 1012. * пример. IConfiguration[key]=value;
...