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