IConfiguartionSectionHandler e la possibilità di customizzare sezioni del file di configurazione è una della cose che mi sono sempre piaciute! Con la nuova versione del framework e i generics è/sarebbe possibile scrivere devvero velocemente un IConfiguartionSectionHandler, ecco come faccio:
- Defisco lo schema xsd della mia sezione (MySectionSchema.xsd)
- Genero le classi per la sezializzazione (MySectionSchema.cs) con xsd.exe, che ho a portata di menù
- Definisco il mio handler sfruttando una classe base così definita:
public abstract class ConfigurationSectionHandler<T> : IConfigurationSectionHandler
{
#region IConfigurationSectionHandler Members
object IConfigurationSectionHandler.Create(object parent, object configContext, System.Xml.XmlNode section)
{
XmlSerializer ser = new XmlSerializer(typeof(T), new XmlRootAttribute(section.Name));
XmlNodeReader reader = new XmlNodeReader(section);
return ser.Deserialize(reader);
}
#endregion
}
...la classe così fatta potrebbe dare dei problemi in caso di namespace specializzati per cui per fare le cose fatte bene si potrebbe/dovrebbe scrivere anche così:
public abstract class ConfigurationSectionHandler<T> : IConfigurationSectionHandler
{
#region IConfigurationSectionHandler Members
object IConfigurationSectionHandler.Create(object parent, object configContext, System.Xml.XmlNode section)
{
XmlSerializer ser = new XmlSerializer(
typeof(T),
new XmlAttributeOverrides(),
new Type[]{},
new XmlRootAttribute(section.Name),
section.NamespaceURI);
XmlNodeReader reader = new XmlNodeReader(section);
return ser.Deserialize(reader);
}
#endregion
}
- Una Riga per la definizione della classe concreta:
public class MyConfigSectionHandler: ConfigurationSectionHandler<MySectionSchema>{}
Purtoppo a volte uno è tutto intento nel scoprire le funzionalità tanto pubblicizzate del nuovo framework che le cose banali/marginali finisco per sfuggirgli. E infatti qualche settimana fà discutendo sul newsgroup ho avuto la tremenda notizia che tale modalità di operare verrà deprecata anche se le classi non sono marcate come Obsolete... e infatti sul MSDN tristemente leggo:
"This topic uses the System.Configuration.IConfigurationSectionHandler interface, which has been deprecated in the .NET Framework version 2.0. For an example that uses the System.Configuration.ConfigurationSection class, see How to: Create Custom Configuration Sections Using ConfigurationSection. If you use the following code examples, please build them with the .NET Framework version 1.0 or 1.1." (http://msdn2.microsoft.com/en-us/library/ms228056.aspx)
Si certo esistono le nuove classi per la gestione del config sono ben fatte e piene di nuove potenzialità ma come ho detto in un mio suggerimento su lady bug, "IConfiguartionSectionHandler, why deprecated?" non capisco perchè deprecare tale modalità in quanto comunque è sistema pratico e veloce... sebbene gli esempi di MSDN lo facciamo apparire ostico e avanzato! Quindi perchè non matenere tutte e due le possibilità? Beh comunque qualcuno mi ha risposto - non so se per cortesia o perchè davvero interssato - dicendo che terranno in considarazione - a momento debito - il mio suggerimento... bah incrociamo le dita :-p Lunga vita a IConfigurationSectionHandler!
posted @ martedì 31 gennaio 2006 16:36