KNOW INTUIT, Лекция, Анатомия на приложенията
Конфигурация на приложението
Когато разработвате приложения, може да срещнете ситуация, при която някои стойности не трябва да се съхраняват в списъка с изходния код на програмата и тези стойности зависят от средата, в която се изпълнява приложението. Ако тези настройки бяха запазени в изходния код, приложението ще трябва да се компилира отново всеки път, когато бъде преместено в друга среда, като например друг компютър.
Ето защо много често такива стойности се изваждат от обхвата на изходния код на програмата и се записват във външен файл, който може да бъде променен по-късно - конфигурационния файл.
В исторически план конфигурирането на приложение е една от най-класическите задачи, пред които са изправени разработчиците на приложения. Тази задача не е специфична само за уеб приложенията и се решава в различните платформи по различни начини.
По-ранните инструменти за разработка на приложения не съдържаха вградени инструменти за работа с настройките на приложението, така че разработчиците трябваше да разработват този механизъм всеки път. Форматът на настройките не беше стандартизиран и всеки разработчик го поддържаше във формата, който смяташе за необходим (например в текстов файл или в двоичен файл със собствена структура). Този подход създаде редица неудобства при разработването и използването на приложения. Когато разработвахме приложения, трябваше постоянно да се връщаме към въпроса как да съхраняваме настройките на приложението. Когато използвате приложение, никога не е имало стандартизиран формат на конфигурационен файл, който може да се използва.
Платформа. NET Framework решава този проблем - в рамката има стандартен начин за съхраняване на конфигурацията. XML форматът се използва като формат за съхранение на настройките. Използване на XMLКато формат на конфигурационен файл той има няколко предимства:
Всички конфигурационни файлове в . NET имат разширение ".config". Например файловете "web .config" се използват за конфигуриране на уеб приложения, а файловете "app .config" се използват за настолни приложения.
Има цяла йерархия от конфигурационни файлове. Схемата за съхранение на конфигурационния файл е показана по-долу.
система за конфигуриране. NET Framework е разделен на две части - глобални настройки и настройки на приложението. Настройките, посочени в глобалните конфигурационни файлове, са достъпни за всяко приложение, т.е. глобалните настройки се наследяват във всяко приложение. На ниво приложение се дефинира основният конфигурационен файл (той се намира в основната папка на приложението), в който се посочват основните настройки на приложението. Всяка подпапка в проект може да има свой собствен конфигурационен файл. В този случай тази подпапка има своя собствена конфигурация, която е наследена от основния конфигурационен файл и е прецизирана от конфигурационния файл в тази папка. Такава йерархия ви позволява да дефинирате глобални настройки и постепенно, където е необходимо, да ги прецизирате.
Глобалните конфигурационни файлове се намират в папката "C:\Windows\Microsoft.NET\Framework\*version+\CONFIG". Както можете да видите от диаграмата по-горе, тази папка съдържа два файла - machine.config и web .config. И двата файла съдържат настройки за конфигурация и имат същия формат. Разликата между тези файлове е, че настройките, дефинирани във файла "machine.config", не могат да бъдат заменени на ниво приложение, докато настройките, дефинирани във файла "web.config", могат да бъдат заменени на всяко ниво на йерархията. Например, нека разгледаме параметъра, който отговаря за паралелния достъп до уеб услуги, базирани на платформатаWCF. Ако тази настройка е дефинирана в глобалния уеб .config файл, тя ще бъде достъпна за всяко приложение. Няма нужда да го дефинирате за всяко приложение - то вече е дефинирано. Ако обаче искате да промените тази настройка за конкретно приложение, можете лесно да го направите, като замените тази настройка във файла "web .config" за приложението. Ако обаче преместите дефиницията на тази настройка от глобалния файл " web .config" в глобалния файл "machine.config", вече няма да можете да замените настройката на ниво приложение.
Възможността за такава "твърда" настройка на конфигурационни параметри ви позволява изрично да зададете сървърни политики, в рамките на които се изпълняват много приложения. В този случай всяко приложение няма да може да зададе настройките на сървъра според нуждите си.
Както споменахме по-рано, конфигурационните файлове са базирани на XML формат. Примерен конфигурационен файл е показан по-долу.
Както можете да видите, конфигурационният файл съдържа редица настройки по йерархичен начин. Всеки възел във файла с настройки дефинира отделен аспект от функционирането на уеб приложението – настройки за кеширане, настройки за компилиране и отстраняване на грешки, низове за свързване на СУБД, настройки за сигурност и др. Всеки възел има свой собствен клас, който обработва тези настройки. Възел не може да бъде добавен към конфигурационен файл, ако с него не е свързан клас манипулатор. В противен случай ще се генерира грешка при стартиране на приложението.
система за конфигуриране. NET Framework използва конфигурационни файлове, за да съхранява собствените конфигурационни настройки на приложението, а не само общи настройки. За да добавите своя собствена секция за конфигурация към файла с настройки, първо трябва да дефинирате товараздел по специален начин. Има стандартен раздел " configSections " за това. Конфигурационният раздел може да бъде дефиниран по следния начин.
В примера по-горе ние дефинираме раздел, наречен " MySection ". Това трябва да създаде класа " MyConfigSection ", който е манипулаторът за параметрите на този раздел. След това в конфигурационния файл можете да дефинирате самата секция за конфигурация и да зададете необходимите параметри.
Броят на параметрите, нивото на влагане и целият външен вид на раздела за конфигурация определят класа на манипулатора за този раздел за конфигурация. Този клас е подклас на базовия клас " ConfigurationSection ", който съдържа основните механизми за работа с данните от конфигурационния файл. В най-простата ситуация можете да дефинирате обработката на свойствата на раздела, в този случай свойството " MyParam1 ". За да направите това, трябва да създадете ново публично свойство в класа на манипулатора и да го маркирате със съответния атрибут " ConfigurationProperty ".
Такава дефиниция би позволила времето за изпълнение. NET Framework за правилно интерпретиране на раздела за конфигурация.
Трябва да се отбележи, че всички секции за конфигурация, налични по подразбиране в . NET Framework се декларират по подобен начин (използвайки секцията " configSections "). Тези дефиниции се правят в глобалния файл "machine.config".
И накрая, обектът WebConfigurationManager се използва за достъп до съществуващи секции за конфигурация. За да направите това, използвайте статичния метод „OpenWebConfiguration“, за да получите обекта за конфигурация, и след това метода „GetSection“, за да получите достъп до конкретния раздел. След това тази секция може да бъде прехвърлена към класа на манипулатора на тази секция и с помощта напублични свойства на последния, работа с настройките на конфигурацията.
По този начин конфигурационната подсистема . NET Framework е мощен механизъм, който ви позволява както да замените настройките на приложението по подразбиране, така и да дефинирате свои собствени опции за конфигурация.