Я разрабатываю решение, включающее несколько многофункциональных клиентов .NET, центральный сервер и базу данных, содержащую параметры конфигурации. Я хочу следовать правильной несвязанной архитектуре и не относиться к настройкам приложения как к глобальным переменным. Вместо этого я хочу просто использовать внедрение зависимостей для передачи полученных значений конфигурации конструкторам при запуске приложения по мере построения графа объектов.
Это кажется прямолинейным и простым... за исключением случаев, когда речь идет об изменениях настроек во время выполнения. Я заметил, что современные приложения обычно не требуют перезапуска, чтобы изменения вступили в силу. Это не только приятное удобство для пользователя, но и может быть совершенно необходимо, когда речь идет о нескольких клиентах и службах, зависящих от этих настроек.
Я не могу понять, как могут быть достигнуты эти два идеала (настройки, вводимые при запуске, и плавное обновление значений параметров во время выполнения). Другими словами, единственный способ, которым я могу представить всех клиентов, использующих актуальные настройки, — это для всех классов, зависящих от настроек, полагаться на какую-то службу IAppConfiguration, которая всегда запрашивает самое последнее значение при каждом запросе. Это не только способствует плохой архитектуре (согласно этому ответу), но и снижает производительность (например, если были задействованы запросы к базе данных).
Спасибо