Il framework .NET mette a disposizione degli sviluppatori delle API (System.Configuration.ConfigurationSettings.AppSettings) per la lettura della sezione AppSettings dei files di configurazione tipo app.config o web.config. Ecco uno stralcio di codice di una tipica sezione AppSettings all'interno di un file .config:
<configuration>
<appSettings>
<add key="ConnectionString" value="server=.;database=pubs;
userID=sa;pwd=pippo;"/>
<add key="Debug" value="true"/>
</appSettings>
</configuration>
Per leggere il valore della chiave ConnectionString dalle applicazioni .NET non dobbiamo fare altro che fare riferimento a questo codice: ConfigurationSettings.AppSettings["connectionString"]
ed il gioco è fatto.
Un'alternativa valida a questo approccio e che anch'io utilizzo, consiste nel creare un oggetto che faccia da wrapper (cioè guscio) per i valori contenuti nelle sezioni AppSettings dei files .config, in grado di consentire un accesso fortemento tipizzato a questi valori. Ecco un esempio:
class sealed Globals
{
public static string ConnectionString
{
get
{
return ConfigurationSettings.AppSettings["ConnectionString"];
}
}
public static boolean IsDebug
{
get
{
//Eventuale validazione del valore...
return Boolean.Parse( ConfigurationSettings.AppSettings["Debug"] );
}
}
}
La classe Globals garantisce l'accesso a tutti i valori del file .config
in modo sicuro e immediato e con molteplici vantaggi:
- Possiamo sfruttare la tecnologia Intellisense durante la scrittura del codice all'interno di Visual Studio
- Viene eliminata la dipendenza dal namespace System.Configuration
- Tutto il codice per accedere ai settaggi dell'applicazione viene centralizzato (con tutti i benifici del caso) all'interno di un'unica classe.
-
Viene ridotta la possibilità di commettere errori non rilevabili in fase di compilazione:
String connString = ConfigurationSettings.AppSettings["ConnectionsString"];
Con l'arrivo di ASP.NET 2.0 questo tipo di approccio fortemente tipizzato per la lettura dei files di configurazione non sarà più necessario, in quanto già integrato all'interno del framework, grazie all'introduzione di classi appositamente studiate allo scopo.