Continuo sull'argomento
System.Configuration, proponendovi un esempio di come creare una collection di
ConfigurationElement custom. Per capire l'applicazione dell'esempiuo che sto per
introdurre bisogna una ttimo soffermarsi su una particolare tipologia di
elementi di configurazione. Mi riferisco ad esempio al nodo
<providers> all'interno di una sezione di configurazione di
MembershipProvider piuttosto che magari la sezione dedicata
ad httpHandler e httpModules. All'interno di questo tipo di sezioni è
possibile aggiungere elementi, ma anche rimuoverne con le seguenti
sintatti:
<add />
<remove />
<clear />
Nel framework 2.0 questo tipo
di sezioni sono perfettamente definibili da parte dell'utente implementando una
ConfigurationElementCollection. Si tratta in breve di estendere una classe del
framework, implementando un certo numero di metodi: nell'esempio che riporto qui
di seguito ecco come realizzare la versione base che accetterà l'aggiunta di
nuovi elementi con <add />
public class ApplicationInfoCollection : ConfigurationElementCollection
{
protected override ConfigurationElement CreateNewElement()
{
return new ApplicationInfo();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((ApplicationInfo)element).Name;
}
}
Con queste poche righe di codice avremo definito una sezione di
configurazione che accetta tutte le chiavi che abbiamo elencato poco fa,
attribuendo loro la funzionalità che ci aspetteremo. In particolare i due metodi
si occupano di creare una nuova istanza di elemento per la collection e di
restituire il valore della proprietà considerata chiave all'interno di esso.
Questo consente oltre che creare gli elementi con <add /> anche di
rimuoverli specificando a quale di essis ci si riferisce. Non rimane ora che
esporre una proprietà in una classe:
/// <summary>
/// Applicazioni registrate
/// </summary>
[ConfigurationProperty("applications", IsDefaultCollection = false)]
[ConfigurationCollection(typeof(ApplicationInfo))]
public ApplicationInfoCollection Applications
{
get { return (ApplicationInfoCollection)this["applications"]; }
set { this["applications"] = value; }
}
Il primo attributo informa che ci stiamo riferendo ad una
proprietà di configurazione che quindi avrà un corrispondente elemento nel file
di configurazione. L'elemento in questo caso si chiamerà <applications>.
Il secondo attributo invece consente di dire quale tipo di di elemento contiene
la collection; Questo in effetti può sembrare ridondante... ma di questo non
prendetevela con me.
powered by IMHO 1.3