Где хранить настройки приложения?

Недавно я обнаружил, что файл «Web.Config» содержит раздел , который, похоже, подходит для хранения настроек приложения. Черт возьми, у него даже есть программный способ доступа к файлу через стандартную системную библиотеку. Так что, проявив все свои умения, я написал интерфейс для доступа к нему, а затем конкретную реализацию интерфейса, показанную здесь:

public interface IAppSettings
{
    IEnumerable GetValues(string componentName, string settingName);
    IEnumerable> GetValuePairs(string componentName, string settingName);
    void SetValues(string componentName, string settingName, IEnumerable valueList, bool append);
    void SetValuePairs(string componentName, string settingName, IEnumerable> pairList, bool append);
}

Затем я обнаружил, что сохраняет настройки обратно в "web.config" во время работы приложения. вызывает перезапуск всего приложения . Это кажется мне совершенно неразумным, потому что если я много пишу в web.config и приложение каждый раз перезагружается, то такие вещи, как HttpRuntime.Cache, полностью очищаются, что делает мой кеш бесполезным, потому что он постоянно очищается и заполняется заново.

Итак, мне интересно: где мне хранить настройки приложения?

Есть ли хорошее решение для этого, чтобы мне не приходилось катить свои собственные?

РЕДАКТИРОВАТЬ:

Хорошо, спасибо всем, кто предложил использовать БД и потенциальную схему таблицы. Я думаю, что собираюсь использовать следующую схему:

settings:
    index NUMBER NOT NULL AUTO_INCREMENT   <== Primary Key
    component NVARCHAR(255) NOT NULL
    setting NVARCHAR(255) NOT NULL
    key   NVARCHAR(255)
    value NVARCHAR(255) NOT NULL

Хотя я не думаю, что сделаю «настройку» P-Key, но вместо этого буду использовать индекс Auto-Incr. Таким образом, если у меня есть приложение, которому нужно отправить что-то по почте нескольким менеджерам, я могу сохранить много:

index     component       setting        value
1         RequestModule   ManagerEmail   manager1@someplace
2         RequestModule   ManagerEmail   manager2@someplace

А затем я могу использовать:

IEnumerable GetValues(string componentName, string settingName);

И оно вернет список адресов электронной почты, а не только одно значение.

Есть ли в этом смысл?

7
задан Flimzy 7 April 2019 в 10:33
поделиться