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 "stong", semplicemente scrivendo:
NAMESPACE.CLASSE.KEY1
- Speciale per il lancio di Visual Studio 2008, SQL Server 2008 e Windows Server 2008 dal 25/02 al 07/03
- Rilasciata la CTP Preview di ASP.NET 3.5 Extensions
- Piccoli grandi VWD Express 2008 crescono
- Galleria fotografica dinamica con ASP.NET AJAX
- #937 - Personalizzare il contenuto del profilo con l'evento Personalize
- Il DataSet nel web è il male
- #904 - L'uso dell'attributo TemplateInstance con ITemplate nei custom control
- #928 - Proteggere il ViewState di ASP.NET criptandolo
- #907 - Utilizzo di XmlSerializer con custom collection
- Realizzare un controllo custom in ASP.NET AJAX - Seconda parte
- DropDowList tu mi tradisci
- Introduzione ad ASP.NET 3.5: novità e caratteristiche
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.







Stampa
Snippet
Download


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!