Vytváření vlastních sekcí ve web.configu
Častým způsobem ukládání nastavení webových aplikací v ASP.NET je ukládání do web.configu. V základu máme možnost přidávat jen elementy do sekce <appSettings>. Takový postup je OK, dokud nám stačí ukládat jen jednoduché věci ve tvaru klíč-hodnota. Kousek XML uchovávající například název stránky může vypadat následovně:
<appSettings> <add key="PageTitle" value="Moje stránka" /> </appSettings>Často taková věc stačí, někdy ale naopak chceme ukládat i složitější věci, teď mě napadají třeba detailní informace k připojení k nějaké vzdálené službě. V takové situaci by se nám určitě víc než X na první pohled nesouvisejících hodnot v <appSettings> hodilo moci uložit takový kód:
<serviceConnection available="true" timeout="00:01:00" url="http://localhost/MyService" />ASP.NET naštěstí umožňuje rozšiřovat web.config. Dělá se to tak, že pro každý element, který chceme přidat (v našem případě se jmenuje <serviceConnection>), vytvoříme třídu odvozenou od ConfigurationSection, která bude mít sadu public vlastností odpovídajících požadovaným atributům (pro nás tedy atributy “available”, “timeout” a “url”). K tomu navíc musí mít každá z vlastností nad sebou atribut (teď myslím .NETovský atribut, ne ten XML) ConfigurationProperty, který určuje název atributu v XML, to, zda je povinný, a případně jeho výchozí hodnotu. Kód opět řekne víc, než tisíc slov:
public class ServiceConnection : ConfigurationSection
{
[ConfigurationPorperty("available", IsRequired = false, DefaultValue = true)]
public bool Available
{
get { return (bool)base["available"]; }
set { base["available"] = value; }
}
[ConfigurationPorperty("timeout", IsRequired = true)]
public TimeSpan Timeout
{
get { return (TimeSpan)base["timeout"]; }
set { base["timeout"] = value; }
}
[ConfigurationPorperty("url", IsRequired = true)]
public string Url
{
get { return (string)base["url"]; }
set { base["url"] = value; }
}
}
Registrace sekce do web.config
Pro zaregistrování naší nové sekce do web.configu stačí upravit sekci <configSections>. Tento krok je velmi důležitý, protože kdybyste se pokusili přidat do web.configu nezaregistrovanou sekci/element, tak při spuštění aplikace dojde k chybě. Registraci provedete jako v následujícím kódu:
<configSections> <section name="serviceConnection" type="ServiceConnection" /> </configSections>Myslím, že není moc co vysvětlovat – atribut “name” definuje název elementu a atribut "type” odkazuje na naší C# třídu.
A máme hotovo, data z naší nové sekce vytáhneme, jako by to byla jakákoliv standardní sekce, tedy takto:
Configuration config = WebConfigurationManager.OpenWebConfiguration("/");
ServiceConnection sc = (ServiceConnection)config.GetSection("serviceConnection");
// Hodnotu atributu url získáte pomocí sc.url;
Comments 0 Comments