Il posto migliore dove inserire i parametri delle nostre applicazioni è senza dubbio la sezione appSettings nel web.config.
Rispetto alla versione precedente del framework l'API per ottenere questi parametri è stata modificata, mentre quella precedente è rimasta solo per compatibilità ed è stata marcata come obsoleta, per cui verrà probabilmente eliminata nelle prossime versioni.
Versione 1.x:
System.Configuration.ConfigurationSettings.AppSettings["key1"];
Versione 2.0
System.Configuration.ConfigurationManager.AppSettings["key1"];
Utilizzando quest'approccio si ha il problema di non avere un controllo sul nome delle chiavi inserite se non a run-time.
Grazie ai BuildProvider possiamo superare questo inconveniente creando in fase di compilazione una classe che espone, come proprietà statiche, tutti i parametri contenuti in appSettings.
public class AppSettingsBuildProvider : System.Web.Compilation.BuildProvider { public override void GenerateCode(System.Web.Compilation.AssemblyBuilder assemblyBuilder) { //Cerca sul file di build il namespace ed il nome della classe da generare string nameSpace = String.Empty, className = String.Empty; using (TextReader rd = OpenReader()) { string[] line = rd.ReadLine().Split(','); nameSpace = line[0].Trim(); className = line[1].Trim(); } //Crea l'unita di compilazione CodeCompileUnit unit = new CodeCompileUnit(); //Crea il namespace CodeNamespace ns = new CodeNamespace(nameSpace); ns.Imports.Add(new CodeNamespaceImport("System")); //Crea la classe CodeTypeDeclaration classType = new CodeTypeDeclaration(className); classType.Attributes = MemberAttributes.Public|MemberAttributes.Static; //Per ogni parametro nella sezione appSettings crea una proprietà statica foreach (string key in System.Configuration.ConfigurationManager.AppSettings) { CodeMemberProperty prop = new CodeMemberProperty(); CodeSnippetExpression get = new CodeSnippetExpression("return \"" + System.Configuration.ConfigurationManager.AppSettings[key] + "\";"); prop.Type = new CodeTypeReference(typeof(string)); prop.Attributes = MemberAttributes.Public | MemberAttributes.Static; prop.Name = key; prop.GetStatements.Add(get); classType.Members.Add(prop); } //agginge namespace e classe all'unita di compilazione e compila il codice ns.Types.Add(classType); unit.Namespaces.Add(ns); assemblyBuilder.AddCodeCompileUnit(this, unit); } }
Nel file di build ci sono i dati relativi al namespace ed al nome della classe nel formato "NAMESPACE, CLASSE".
Nella pagina potremo accedere ai parametri in maniera "strong", semplicemente scrivendo:
NAMESPACE.CLASSE.KEY1
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- .NET Conference Italia 2018 - Milano
- Tutorial ASP.NET
- Seconda preview per i Dynamic Data Control 4.0
- Disponibile al download la versione finale di Mozilla Firefox 4
- Microsoft Security Bulletin MS02-044
- Shared Source Initiative per gli MVP
- Mono 1.1.10 per un po' di ASP.NET 2.0
- Webcast 'ASP.NET 2.0 HttpRuntime'