martedì 16 marzo 2010

ConfigurationManager / ConfigurationSection

Il web.config è nostro amico ??
Molti credo troppi, non conoscono le vere potenzialità di questo elemento. La letteratura sull'argomento è però molto molto sostanziosa.

Ma per l'appunto il web.config è davvero un nostro amico ?? SI certo che si, basta saperlo sfruttare bene.

Parafrasando i tanti esempi che si possono trovare sul web si possono ottenere mille e milli utilizzi, mille scopi e mille interpretazioni. Nel mio caso come più volte è capitato lo scopo è di presentare una funzionalità e di lasciare al lettore
la possibilità di estendere quanto ha letto con la sua realtà.

Partiamo però da una necessità:
- per un web method di un web services ci serve una particolare configurazione.
- questa è riassumibile con gli attributi "ip,hostName";

va da se che è un perfetto esempio di livello 0.

Creiamo quindi una classe che abbia quest'aspetto...

public class MySpecialConfiguration: ConfigurationSection
{
[ConfigurationProperty("IP")]
public string IP
{
get { return (string)base["IP"]; }
}

[ConfigurationProperty("hostName")]
public string hostName
{
get { return (string)base["hostName"]; }
}
}

Questa classe Estende configurationSection e aggiunge due attributi (IP, hostName).. entrambi come string..

Ora nel web Method...

MySpecialConfiguration msc = ConfigurationManager.GetSection("MySpecialConfiguration") as MySpecialConfiguration;
this.IP = msc.IP;
this.hostName = msc.hostName

tramite il configurationManager.GetSection ([nome]) recuperiamo il nome della section che ci serve.

MySpecialConfiguration msc = (MySpecialConfiguration) ConfigurationManager.GetSection("MySpecialConfiguration");

E' la stessa cosa, scegliete voi come scriverla...

E ora ... la parte clue... il web.config... ( ricordatevi che [ /] che devono essere viste come maggiore e minore...)

[configuration]
[configSections]
[section name="MySqlParameters"
type=" thisSample.MySpecialConfiguration, thisSample" /]
[/configSections]

Che cosa diavolo è type ??? thisSample.MySpecialConfiguration è il nome della classe che abbiamo implementato prima
mentre thisSample è l'assembly

Questa è la dichiarazione della nostra section, ma ci serve anche

[MySqlParameters
IP="127.0.0.1"
hostName="nudrubufu"/]

al richiamo del web method verranno letti i parametri di configurazione...

A ben pensarci questo è proprio tutto quello che serve per aggiungere le proprie "specia conf" al web conf...

Nessun commento: