Недавно я обнаружил, что файл «Web.Config» содержит раздел <appSettings>
, который кажется подходящим для хранения настроек приложения. Черт возьми, у него даже есть программный способ доступа к файлу через стандартную системную библиотеку. Так что, будучи очень умным, я написал интерфейс для доступа к нему, а затем конкретную реализацию интерфейса, показанную здесь:
public interface IAppSettings
{
IEnumerable<string> GetValues(string componentName, string settingName);
IEnumerable<KeyValuePair<string, string>> GetValuePairs(string componentName, string settingName);
void SetValues(string componentName, string settingName, IEnumerable<string> valueList, bool append);
void SetValuePairs(string componentName, string settingName, IEnumerable<KeyValuePair<string, string>> 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<string> GetValues(string componentName, string settingName);
И он вернет список адресов электронной почты, а не просто одно значение.
Имеет ли это смысл?