Постоянное хранение настроек / переменных в C # /. NET - PullRequest
7 голосов
/ 04 июня 2010

Хорошо, это совершенно новый вопрос, поэтому, пожалуйста, прости меня.

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

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

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

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

1011 * ТИА *

Ответы [ 8 ]

4 голосов
/ 05 июня 2010

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

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

Пример

См. How-To (Класс объекта => Двоичная сериализация => В память => Зашифровать => Сохранить в файл) в http://social.msdn.microsoft.com/forums/en-US/netfxremoting/thread/68c200c2-4aa4-48dc-95be-6fe077fd10f4/

Ссылки

3 голосов
/ 04 июня 2010

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

1 голос
/ 03 декабря 2012

Вы можете с уверенностью использовать «Настройки приложения» в .Net Framework.

http://msdn.microsoft.com/en-us/library/k4s6c3a0.aspx

1 голос
/ 04 июня 2010

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

0 голосов
/ 05 июня 2010

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

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

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

0 голосов
/ 05 июня 2010

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

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

Это веб-базируется? выиграть формы ?, wcf?

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

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

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

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

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

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

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

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

Удачи,

Patrick

0 голосов
/ 04 июня 2010

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

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

// 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 голосов
/ 04 июня 2010

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

...