Расширенные клиенты .NET: как управлять параметрами конфигурации в архитектуре внедрения зависимостей

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

Это кажется прямолинейным и простым... за исключением случаев, когда речь идет об изменениях настроек во время выполнения. Я заметил, что современные приложения обычно не требуют перезапуска, чтобы изменения вступили в силу. Это не только приятное удобство для пользователя, но и может быть совершенно необходимо, когда речь идет о нескольких клиентах и ​​службах, зависящих от этих настроек.

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

Спасибо


person BCA    schedule 21.03.2016    source источник
comment
Давным-давно и в галактике в Орландо (2008?) Я помню сессию, где у Грега были сервисы для настройки в его wcf-приложении StockTrader. msdn.microsoft.com/en-us/library/ff921074.aspx Понятия не имею, есть ли он еще там, но это всего лишь крошка, если вы хотите продолжить.   -  person granadaCoder    schedule 21.03.2016
comment
Я не видел никаких настроек в текущей версии Stock Trader RI, но все равно спасибо   -  person BCA    schedule 21.03.2016
comment
Возможно, он осудил это. Как я уже сказал... это было давно... но он сделал большое дело о возможности обновления конфигурации ИЗ ОДНОГО ИСТОЧНИКА для всех клиентов и серверов WCF.   -  person granadaCoder    schedule 21.03.2016
comment
Я предположил, что когда вы написали wcf, это была опечатка, и вы имели в виду WPF. Я не знал, что Stock Trader RI когда-либо использовал WCF.   -  person BCA    schedule 21.03.2016
comment
Нет, я имел в виду WCF. channel9.msdn. ком/Шоус/Конечная точка/   -  person granadaCoder    schedule 21.03.2016
comment
Вы правы... к сожалению, они должны были удалить ссылку для скачивания, а также любое руководство, связанное с WCF или конфигурацией. Спасибо за помощь в любом случае.   -  person BCA    schedule 21.03.2016
comment
Одним из таких подходов может быть использование кеша (например, из System.Runtime.Caching) для хранения настроек и предоставления способа записи настроек кеша. Затем всякий раз, когда параметр обновляется в приложении, оно может записывать значение как в кэш, так и в хранилище данных за одну транзакцию. В терминах DI это, вероятно, будет означать обертывание ваших классов чтения и записи данных в декоратор, чтобы эти записи в кэш были прозрачными для вызывающей стороны. Результатом является параметр, который изменяется во время выполнения и сохраняется при перезагрузке кэша.   -  person NightOwl888    schedule 22.03.2016
comment
Другой вариант: Конфигурация приложения для .NET.   -  person NightOwl888    schedule 22.03.2016
comment
Спасибо - я не знал о System.Runtime.Caching... похоже, это может быть элегантным решением.   -  person BCA    schedule 22.03.2016
comment
Ищите также шаблон CacheAside из msdn.   -  person granadaCoder    schedule 24.03.2016