Хранение настроек/переменных постоянно в C#/.NET

Хорошо, это - общее количество newb вопрос, поэтому простите мне.

Что лучший способ состоит в том, чтобы сохранить переменные так, чтобы они сохранились и были восстанавливаемыми? У меня есть небольшое приложение, которое использует приблизительно 10 переменных (строка и десятичное число) как настройки. В настоящее время я преобразовываю их всех в строки, в случае необходимости, поместите их в массив и сериализируйте массив в файл.

Это - боль, если я когда-нибудь хочу добавить переменную. Так, я думал об использовании хеш-таблицы и сериализации это. Снова, не уверенный, что лучший способ состоит в том, чтобы сделать это.

Некоторые требования, которые я имею, - то, что данные должны храниться надежно (зашифрованные) и должны быть доступными другими приложениями (у меня есть два других небольших приложения, которые читают настройки).

Я знаю, что сверхусложняю что-то настолько основное и простой. В этом нужно выполнить почти каждое созданное приложение.

TIA

7
задан robotshapes 4 June 2010 в 19:09
поделиться

7 ответов

Самый простой, эффективный и гибкий подход - создать класс, добавить настройки, а затем сериализовать / десериализовать, когда это необходимо. Этот исходный код класса можно повторно использовать в других сборках, а сохранение может быть где угодно. Убедитесь, что этот класс знает, как сериализовать / десериализовать себя из-за ваших требований безопасности. Это гарантирует, что реализация останется с классом. Затем вызывающей сборке просто нужно создать объект, вызвав статический / общий метод.

Это дает вам строго типизированные настройки, управление версиями, возможность добавлять новые настройки и даже сложные типы данных (другие классы). Этот объект можно даже передавать другим объектам в качестве аргументов, и, поскольку он поддерживает сериализацию, он очень гибкий.

Пример

См. How-To (Object Class => Binary Serialization => To Memory => Encrypt => Save to File) на http://social.msdn.microsoft. .com / forum / en-US / netfxremoting / thread / 68c200c2-4aa4-48dc-95be-6fe077fd10f4 /

Ссылка

4
ответ дан 7 December 2019 в 03:11
поделиться

Если бы я все равно использовал базу данных, я бы, вероятно, добавил туда таблицу и сохранил их, в противном случае я бы предпочел какой-нибудь XML-файл, я бы не хотел добавлять дополнительную сложность БД всего для нескольких настроек.
С помощью любого из этих решений вы можете легко добавить дополнительные настройки (более старые приложения просто игнорируют их), а также указать тип данных (как атрибут в XML).

0
ответ дан 7 December 2019 в 03:11
поделиться

Используйте файл конфигурации приложения / сети и метод ConfigurationManager.AppSettings [configurationItemName]. (в System.Configuration)

3
ответ дан 7 December 2019 в 03:11
поделиться

Вы можете хранить значения в системном реестре:

Получение ключа:

// This will create the key if it does not exist.
String keyPath = "Sofware\Foo\Bar";  // use "Software\Company\App" or similar
RegistryKey appKey = Registry.CurrentUser.CreateSubKey(keyPath);

Сохранение значения:

String config = "SomeConfigurationValue";
appKey.SetValue("ConfigString", config);

Загрузка значения:

String config = (string)appKey.GetValue("ConfigString", "Default Value");
0
ответ дан 7 December 2019 в 03:11
поделиться

Просто чтобы убедиться, что я понимаю

Требования: 1. Хранить пользовательские настройки для вашего приложения в файле или в базе данных. 2. Время от времени вы можете добавлять дополнительные свойства.

Это web-based? win forms?, wcf?

Моя первоначальная мысль - включать номер версии при сохранении.

Каждый раз, когда вы обновляете класс настроек, создайте новый класс настроек, который наследуется от последней версии. Добавьте свои новые свойства и обновите номер версии.

Хранение: В БД два поля: 1- версия 2- сериализованные данные настроек. В файле две записи 1- версия 2- сериализованные данные настроек.

При сериализации обязательно указывайте номер версии класса настроек.

При десериализации используйте Фабрику для получения правильной версии класса настроек.

Следует помнить, что в приложении необходимо учитывать более старые экземпляры настроек.

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

Таким образом, если Фабрика найдет старую версию класса настроек, она сможет использовать сохраненные данные для создания новейшей версии класса и заполнить новые свойства значениями по умолчанию.

Good Luck,

Patrick

0
ответ дан 7 December 2019 в 03:11
поделиться

почему бы вам просто не поместить их в app.config? (или web.config)

1
ответ дан 7 December 2019 в 03:11
поделиться

Сохраните настройки в классы и сериализуйте эти объекты в изолированное хранилище. Обязательно установите уровень изоляции на уровне пользователя, чтобы другие приложения могли читать настройки для текущего пользователя.

http://msdn.microsoft.com/en-us/library/8dzkff1s%28VS.80%29.aspx

IsolatedStorageFile, производный из IsolatedStorage, предоставляет базовые управление хранимой сборкой и файлы приложения. Экземпляр IsolatedStorageFile класс представляет единое хранилище, расположенное в файле система.

0
ответ дан 7 December 2019 в 03:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: