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