La passeggiata odierna nel framework 2.0 è stata allietata da
un bell'incontro: la classe ApplicationSettingsBase. Considero bello
l'incontro perchè in questa classe ho ritrovato formalizzato quello che ormai è
il mio abituale modo di incapsulare in una classe il file di configurazione
dell'applicazione. Sono stato parecchio in giro, per il namespace
System.Configuration, alla ricerca delle novità che lo riguardano,
per decidere come comportarmi per la configurazione di .TRAQ. Da quello che
vedo, le novità non sono poche, ma in gran parte si concentrano attorno a questa
classe ed ai SettingsProvider che la supportano.
ApplicationSettingsBase in sostanza consente di
esporre come istanza di una classe, una sezione del file di configurazione,
trasformandone le chiavi in normali proprietà read/write. Quest'ultima
affermazione fa anche comprendere che il framework 2.0 apporta una grossa novità
ai file .config, ovvero la possibilità di modificarli a runtime. Ma facciamo un
passo alla volta. Ecco una classe che estende
ApplicationSettingsBase:
public sealed class DataProviderSettings : ApplicationSettingsBase
{
private static DataProviderSettings mInstance = new DataProviderSettings();
private DataProviderSettings()
{}
public static DataProviderSettings Current
{
get { return mInstance; }
}
[ApplicationScopedSetting]
public string Type
{
get { return (string)this["Type"]; }
set { this["Type"] = value; }
}
[UserScopedSetting]
[DefaultSettingValue("10")]
public System.Int32 PageSize
{
get { return (System.Int32)this["PageSize"]; }
set { this["PageSize"] = value; }
}
}
In questa classe sono riassunte due delle maggiori novità che ho
scovato. Innanzitutto occorre notare gli attributi ApplicationScopedSetting e
UserScopedSetting, che rispettivamente consentono di dare un ambito di
applicazione e di singolo utente alla proprietà. Questo significa che PageSize
in particolare avrà un valore potenzialmente diverso per ogni utente
dell'applicazione. La seconda novità, come anticipato poche righe fa è il metodo
Save() per mezzo del quale è possibile rendere persistenti le modifiche
apportate alle proprietà a runtime. PageSize, potrebbe essere una valida
proprietà per memorizzare la dimensione massima di una pagina di record di una
applicazione, secondo le preferenze dell'utente.
Ecco infine come deve essere
realizzata la parte di configurazione in Xml:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup
name="applicationSettings"
type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section
name="Elite.DotTraq.ConsoleTest.DataProviderSettings"
type="System.Configuration.ClientSettingsSection, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</sectionGroup>
</configSections>
<applicationSettings>
<Elite.DotTraq.ConsoleTest.DataProviderSettings>
<setting
name="Type"
serializeAs="String">
<value>System.Configuration.ClientSettingsSection, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</setting>
<setting
name="PageSize"
serializeAs="String">
<value>15</value>
</setting>
</Elite.DotTraq.ConsoleTest.DataProviderSettings>
</applicationSettings>
</configuration>
L'esplorazione è appena cominciata, infatti ancora non ho avuto
occasione di sperimentare l'uso dei SettingsProvider che a quanto ho capito
dovrebbero consentire la lettura/scrittura di formati diversi dal consueto
xml, e permettere di adottare media più inconsueti, come ad esempio un
database. Ecco che in questo caso la proprietà di cui sopra potrebbe essere
addirittura letta direttamente dal profilo utente nel database... ancora non so
come, ma conto di capirlo a breve.
powered by IMHO