Есть ли какой-нибудь распространенный способ сохранить настройки приложения более сложным способом, чем простой файл .settings? - PullRequest
8 голосов
/ 02 февраля 2012

Существует большое приложение WPF с несколькими модулями, окнами, самописными элементами управления и т. Д. Нам нужно сохранить состояние для некоторых элементов пользовательского интерфейса. Например:

  • расположение окон;
  • управление макетом;
  • последний принятый ввод;
  • состояние различных сеток (видимость столбцов, ширина, порядок)

. Файл настроек кажется слишком простым для этого из-за отсутствия в нем иерархии. Почему я не могу просто сериализовать какой-нибудь SettingsModel, содержащий все, что мне нужно, а затем восстановить его при запуске приложения? Очень важным требованием для механизма персистентности является то, что он должен быть extensible : если я реорганизую структуру настроек и попытаюсь десериализовать файл, созданный в какой-то предыдущей версии класса SettingsModel, я, очевидно, потерплю .

Итак, вопрос таков: существуют ли какие-либо структуры для сохранения сложных настроек?

Ответы [ 4 ]

3 голосов
/ 02 февраля 2012

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

2 голосов
/ 03 февраля 2012

Файл .Settings поддерживает изменение структуры с течением времени .Вам даже не нужно использовать файл Settings.cs, вы можете создать своих провайдеров настроек и заполнить их из файла конфигурации, каждый из которых будет иметь свой собственный метод Upgrade для обработки изменений в структуре.1005 *

1 голос
/ 03 февраля 2012

Я сделал это, написав свой собственный код сериализации в XML, пометив элементы в соответствии с полями конфигурации.Когда я десериализую, я запрашиваю XML для каждого элемента, который я хочу заполнить.Если я десериализую старую версию в новую конфигурационную схему, которая имеет дополнительные элементы, XML-запрос возвращает ноль, и я вместо этого вставляю значение по умолчанию.Это позволяет мне обрабатывать списки иерархических данных, я могу зашифровать любую их часть, которая мне нужна, и я не делаю версию XML.Хотя это немного сложнее, чем использование XMLSerializer, мои данные конфигурации меняются не очень часто, поэтому оно того стоило.

Поскольку у вас может быть много пользователей, вы можете сохранить XML каждого пользователя в виде строки вбаза данных. System.Data.Sqlite , RaptorDb и FileDb хорошо работают для этого, как и PersistentDictionary .

Покадругая альтернатива - хранить ваши данные в словарях словарей и использовать SharpSerializer , чтобы сохранить их в формате XML либо в файл, либо в одну из вышеуказанных баз данных.

1 голос
/ 02 февраля 2012

app.config - это еще одно распространенное хранилище. К настройкам файла конфигурации можно легко получить доступ из приложения, и вы даже можете создать свой собственный файл configSections

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...