Хранить коллекцию значений в конфигурационном файле - PullRequest
4 голосов
/ 31 марта 2009

В службе .Net 3.5 (Windows) я хотел бы сохранить небольшую коллекцию значений в файле конфигурации. По сути, мне нужно разрешить администраторам добавлять и удалять значения из этой небольшой коллекции. Что мне нужно добавить в файл конфигурации для хранения коллекции небольших значений, и как я могу прочитать коллекцию в C #?

Чтобы уточнить, коллекция, которую я ищу, - это такие данные:

<Illegal Characters>
  <CustomCollection value="?"/>
  <CustomCollection value="#"/>
  <CustomCollection value=","/>
</Illegal Characters>

Ответы [ 4 ]

3 голосов
/ 06 мая 2009

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

По сути, ваш IConfigurationSectionHandler метод Create должен выглядеть примерно так:

public object Create(object parent, object configContext, XmlNode section)
{
    IList<string> illegal = new List<string>();
    XmlNodeList processesNodes= section.SelectNodes("CustomCollection");

    foreach (XmlNode child in processesNodes)
    {
        illegal.Add(child.Attributes["value"].InnerText);
    }
    return illegal;
}
2 голосов
/ 01 апреля 2009

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

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

1 голос
/ 31 марта 2009

Если количество значений невелико и связанные с ними имена являются фиксированными, вы сможете сохранить их в разделе конфигурации appSettings и ссылаться на них с помощью коллекции ConfigurationManager .AppSettings. Это будет хорошо работать для стандартных пар ключ-значение. Если ваши данные более сложны, чем это, вы можете определить свой собственный раздел конфигурации и связанный ConfigurationSectionHandler для анализа данных в любой пользовательский объект, который вы хотите. Вы также, вероятно, захотите внедрить FileSystemWatcher для обнаружения изменений в файле конфигурации и обновления конфигурации запущенного приложения, если не разрешено запускать / останавливать службу для применения новой конфигурации.

0 голосов
/ 31 марта 2009

Я опишу способ в VB.NET, потому что я уверен, что способ C # очень похож или одинаков в некоторых случаях. Откройте файл settings.settings в разделе «Мой проект» в обозревателе решений. Добавьте в параметры, которые вы хотите, например «OutputPath». Затем, в коде, ссылка на него с

variable = My.Settings.OutputPath

' If a user modifiable setting, you can use:
My.Settings.OutputPath = variable
My.Settings.Save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...