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
Cache policy su route groups di Minimal API in ASP.NET Core 7
Implementare il throttling in ASP.NET Core
Usare ASP.NET Core dev tunnels per testare le applicazioni su internet
Load test di ASP.NET Core con k6
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Short-circuiting della Pipeline in ASP.NET Core
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Catturare la telemetria degli eventi di output cache in ASP.NET Core