G та Custom Configuration Sections

Я впевнений, що багато хто з вас доводилося використовувати файл конфігурації App.Config для зберігання ініціалізують або конфігураційних даних програми. І я також впевнений, що багатьом з вас хотілося створити в даному файлі свої власні структури для зберігання налаштувань. Але в результаті доводилося використовувати вбудовані можливості секції та отримувати значення, використовуючи конструкцію виду:

Що ж, я давно хотів з'ясувати, як використовувати можливості класу ConfigurationSection для опису та завантаження даних, визначених у моєму власному форматі. Після кількох годин експериментів і заглиблення я зміг створити свою структуру даних у файлі конфігурації та скористатися нею у своїй програмі.

Отже, щоб завантажити свою структуру даних із файла App.Config нам знадобляться такі класи:

  1. ConfigurationSection — Цей об'єкт поверне нам секцію користувача.
  2. ConfigurationElementCollection - Це власне колекція елементів, які ми визначимо в секції користувача.
  3. ConfigurationElement - Це сам елемент, що описує певну вами сутність.

Перше, що нам потрібно зробити, це додати до нашого додатку файл app.Config (якщо, звичайно, ви цього ще не зробили). Після чого відкриваємо даний файл і копіпастим наступний код між тегами:

Зауваження:дана секція повинна розташовуватися на самому початку конфігураційного файлу, тобто. відразу після тега, інакше будуть помилки ініціалізації конфігурації.

Далі створимо нашу власну секцію, яка реалізовуватиме нашу власну модель даних:

Зауваження:якщо комусь не подобається додавання вузлів командою add в даному прикладі, то завждиможна зробити свій власний префікс, використовуючи наступний код:

при визначенні колекції елементів у структурі даних. Тоді конфігураційному файлі можна буде писати так:

Закінчимо модифікації у файлі конфігурації та перейдемо до організації взаємодії нашої програми з ним.

Насамперед створимо клас-спадкоємець від ConfigurationSection, що дозволить нам взаємодіяти з нашою секцією у файлі конфігурації через ConfigurationManager під час виконання програми.

Атрибут ConfigurationProperty( «Folders» ) потрібен для зіставлення якості FolderItems з кореневим вузлом нашої структури даних.

Клас FoldersCollection є спадкоємцем ConfigurationElementCollection, який забезпечує взаємодію Космосу з колекцією наших елементів, описаних у app.config. Визначається клас так:

Останнім нам потрібно створити ConfigurationElement, клас який зв'яже нас із кінцевими даними, визначеними у конфігураційному файлі.

Атрибут ConfigurationProperty("folderType") потрібен для того, щоб проасоціювати ім'я xml-атрибута у файлі конфігурації. Інші параметри атрибуту такі як DefaultValue="", IsKey=true, IsRequired=true визначають лише різні опції, що застосовуються до властивостей.

Отже, ми маємо всі необхідні дані та класи, які надають нам можливість зберігати в конфігураційному файлі app.config користувальницьку структуру даних. Використовувати цей підхід можна так:

При цьому не забуваємо прописати System.Configuration в список просторів імен, що підключаються.

Хардкорна конфа за С++. Ми запрошуємо лише профі.