Сохраните набор значений в конфигурационном файле
-
22-08-2019 - |
Вопрос
В службе .Net 3.5 (Windows) я хотел бы сохранить небольшую коллекцию значений в файле конфигурации.По сути, мне нужно разрешить администраторам добавлять и удалять значения из этой небольшой коллекции.Что мне нужно добавить в конфигурационный файл для хранения коллекции небольших значений, и как я могу прочитать коллекцию на C #?
Чтобы уточнить, коллекция, которую я ищу, - это данные, подобные этому:
<Illegal Characters>
<CustomCollection value="?"/>
<CustomCollection value="#"/>
<CustomCollection value=","/>
</Illegal Characters>
Решение
Есть хорошая статья о создании пользовательского обработчика раздела конфигурации, который загружает значения в виде списка здесь.
В основном ваш 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;
}
Другие советы
В качестве альтернативы вы могли бы сохранить одну строку недопустимых символов в качестве регулярного выражения в вашем конфигурационном файле.Таким образом, вам не нужно перебирать символы, чтобы проверить, используются ли они в данной строке - вы могли бы выполнить сравнение на основе регулярного выражения.Это могло бы немного сэкономить процессор и сложность.
Конечно, проще использовать отдельные XML-узлы, если администраторы собираются редактировать файл напрямую.Но если они меняют список символов через само приложение, регулярное выражение может быть хорошим.
Если количество значений невелико и связанные с ними имена фиксированы, вы должны иметь возможность сохранять их в разделе конфигурации AppSettings и ссылаться на них с помощью Конфигурационный менеджер.Коллекция приложений.Это будет довольно хорошо работать для стандартных пар ключ-значение.Если ваши данные более сложны, чем это, вы можете захотеть определить свой собственный раздел конфигурации и связанный с ним Обработчик конфигураций разделов чтобы преобразовать данные в любой пользовательский объект, который вы хотите.Вы также, вероятно, захотите реализовать Просмотр файловой системы для обнаружения изменений в файле конфигурации и обновления конфигурации запущенного приложения, если только не допустимо запускать / останавливать службу, чтобы применить новую конфигурацию.
Я опишу способ в VB.NET , потому что я уверен, что способ C # очень похож или одинаковый в некоторых случаях.Откройте файл settings.настройки в разделе Мой проект в Обозревателе решений.Добавьте в настройки, которые вы хотите, например, "OutputPath".Затем, в коде, ссылайтесь на него с помощью
variable = My.Settings.OutputPath
' If a user modifiable setting, you can use:
My.Settings.OutputPath = variable
My.Settings.Save()