Proseguendo l'indagine nella configurazione dell'applicazione
del Framework 2.0, sono finalmente venuto a capo del SettingsProvider.
Il SettingsProvider è una classe, che si occupa della
serializzazione/deserializzazione delle informazioni di configurazione, di una
classe derivata da ApplicationSettingsBase. Un SettingsProvider si compone di un
metodo GetPropertyValues() che riceve in input l'elenco delle proprietà della
classe da deserializzare che sono marcate con un attributo di scope come
UserScopedSettings o ApplicationScopedSetting e di uno speculare metodo
SetPropertyValues() che invece riceve i valori da serializzare, corrispondenti
alle suddette proprietà.
L'uso classico di un
SettingsProvider potrebbe essere ad esempio quello di serializzare e
deserializzare le informazioni di configurazione su un file crittato. Per fare
questo si dovrà creare una classe che deriva da ApplicationSettingsBase che esponga tutte le informazioni di
configurazione (vedi qui).
A questo punto si potrà realizzare una classe,
derivandola da LocalFileSettingsProvider e fare l'override delle proprietà e dei
metodi che la compongono, facendo particolare attenzione ai sopracitati
GetPropertyValues() e SetPropertyValues(). Al loro interno si andrà a decrittare
le informazioni di configurazione e a comporre una collection di valori o
viceversa a serializzare le informazioni e poi a crittare il
file.
Ecco un breve esempio:
public class CryptoSettingsProvider : LocalFileSettingsProvider
{
private string mName;
public override string ApplicationName
{
get { return mName; }
set { mName = value; }
}
public override string Name
{
get { return "CryptoSettingsProvider"; }
}
public override SettingsPropertyValueCollection GetPropertyValues
SettingsContext context, SettingsPropertyCollection ppc)
{
// deserializzare il file crittato
}
public override void SetPropertyValues(SettingsContext context, SettingsPropertyValueCollection ppvc)
{
// serializzare il file critato
}
}
Il collegamento tra il SettingsProvider e la
classe di configurazione si ottiene per mezzo dell'attributo
SettingsProviderAttribute nel cui costruttore andrà specificato come tipo
da istanziare il provider appena creato. Ecco
l'attributo
[SettingsProvider("Elite.Test.CryptoSettingsProvider,Elite.Test")]
Occorre fare importanza anche alle proprietà della classe, oltre ai
metodi. Personalmente la proprietà "Name" ha dato parecchi problemi dato che non
c'era scritto da nussuna parte che era obblogatorio farne
l'override.
powered by IMHO