Недавно я обнаружил, что файл "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, полностью очищаются, что делает мой 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);
И он вернет список адресов электронной почты, а не только одно значение.
Имеет ли это смысл?