.NET aplikace jsou předurčeny k tomu, aby své konfigurační údaje ukládaly do souboru jménoaplikace.config
(v případě webových web.config
). K takto uloženým údajům lze přistupovat pomocí namespace System.Configuration.ConfigurationSettings
.
Konfigurační soubory jsou psány ve formátu XML a jsou rozděleny na několik sekcí. Web.Config
typické webové aplikace vypadá nějak takhle:
<configuration>
<appSettings>
<add key="Nazev1" value="hodnota1" />
<add key="Nazev2" value="hodnota2" />
<appSettings>
<system.web>
<authentication mode="Forms">
<forms name=".CHEETAH3AUTH" loginUrl="/Login.aspx" protection="All" timeout="60"/>
</authentication>
</system.web>
</configuration>
Aplikační nastavení se obvykle ukládají do sekce appSettings
jako dvojice název-hodnota. Přistupovat k nim pak lze jako k hodnotám kolekce System.Configuration.ConfigurationSettings.AppSettings
.
Za hranice AppSettings
Výše uvedený postup stačí pro jednoduché aplikace. Ale pokud píšete aplikaci složitější, pravděpodobně oceníte možnost zapsat její konfiguraci pomocí vlastních XML elementů a atributů. Protože jenom málo věcí je v prostředí .NET "zadrátováno" napevno, máte možnost snadno si naprogramovat vlastní konfigurační sekci.
Princip je zhruba následující: Je třeba vytvořit dvě třídy. Jedna bude reprezentovat vlastní nastavení (její vlastnosti a metody budou mít hodnoty podle uživatelem definovaného obsahu konfiguračního souboru). Druhá třída bude tzv. configuration section handler a zajistí naplnění konfigurační sekce dle potřeby.
Představme si, že chcete do konfiguračního souboru vložit novou sekci, která bude obsahovat informace pro odesílání e-mailových zpráv. Ona sekce bude vypadat nějak takhle:
<mailConfig>
<from name="Jméno odesílatele" address="[email protected]" />
<to name="Jméno příjemce" address="[email protected]" />
<smtpServer>localhost</smtpServer>
</mailConfig>
Obslužný kód ve VB.NET sestává ze dvou tříd:
Public Class EmailSettingsConfigHandler
Implements System.Configuration.IConfigurationSectionHandler
Public Function Create(ByVal parent As Object, ByVal configContext As Object, ByVal section As System.Xml.XmlNode) As Object Implements System.Configuration.IConfigurationSectionHandler.Create
Return New EmailSettings(section)
End Function
End Class
Public Class EmailSettings
Private _From, _To, _SmtpServer As String
Friend Sub New(ByVal E As System.Xml.XmlNode)
Me._From = """" & E.SelectSingleNode("from/@name").Value & """ " & _
"<" & E.SelectSingleNode("from/@address").Value & ">"
Me._To = """" & E.SelectSingleNode("to/@name").Value & """ " & _
"<" & E.SelectSingleNode("to/@address").Value & ">"
Me._SmtpServer = E.SelectSingleNode("smtpServer").InnerText
End Sub
Public ReadOnly Property From() As String
Get
Return Me._From
End Get
End Property
Public ReadOnly Property [To]() As String
Get
Return Me._To
End Get
End Property
Public ReadOnly Property SmtpServer() As String
Get
Return Me._SmtpServer
End Get
End Property
End Class
Třída EmailSettings
reprezentuje vlastní nastavení, která načítá ve svém konstruktoru z XML dokumentu.
Třída EmailSettingsConfigHandler
slouží systému k práci s novou konfigurační sekcí. Implementuje rozhraní IConfigurationSectionHandler
, které definuje jedinou metodu: Create
. Jejím jediným parametrem, který nás momentálně zajímá, je section
. To je XmlNode
, odkazující na přiřazenou konfigurační sekci, v našem případě tedy na element <mailConfig>
. Metoda vrací instanci námi vytvořené třídy s nastaveními a je velmi jednoduchá, veškerou "špinavou práci" za nás odvede konstruktor třídy samé.
Konfigurace konfigurátoru
Abychom mohli nově založenou konfigurační sekci využívat, je potřeba ji zaregistrovat. To se dělá přidáním elementu configSections
, jehož obsah je následující:
<configSections>
<section name="mailConfig" type="AltairCommunications.Test.EmailSettingsConfigHandler, Test" />
</configSections>
Atribut section/@name
určuje název elementu konfigurační sekce. Atribut section/@type
je úplné označení typu výše uvedené třídy EmailSettingsConfigHandler
. Konkrétní hodnota tohoto atributu záleží na vašem nastavení. Moje třída je uložena v namespace AltairCommunications.Test
, vaše se bude patrně jmenovat jinak. Parametr za čárkou je název assembly (bez přípony, např. .dll), ve které se typ nachází. Moje knihovna se tedy jmenuje Test.dll
- vaše se opět bude zřejmě jmenovat jinak.
Použití konfigurace
Použití konfigurace je jednoduché. Zavoláte System.Configuration.ConfigurationSettings.GetConfig("název sekce")
a přetypujete na váš konfigurační typ. Například:
Public Sub SendMail()
Dim Config As EmailSettings = DirectCast(System.Configuration.ConfigurationSettings.GetConfig("mailConfig"), EmailSettings)
Dim Msg As New System.Web.Mail.MailMessage
Msg.From = Config.From
Msg.To = Config.To
Msg.Subject = "Testovací zpráva"
Msg.Body = "Obsah testovací zprávy"
System.Web.Mail.SmtpMail.SmtpServer = Config.SmtpServer
System.Web.Mail.SmtpMail.Send(Msg)
End Sub