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


per leggere il post originale o inviare un commento visita il seguente indirizzo: ASP.NET 2.0: Collections di ConfigurationElement