2008-09-24 9 views
2

J'ai besoin de créer une section de configuration, qui est capable de stocker des paires clé-valeur dans un fichier app.config et les paires clé-valeur peuvent être ajoutées indépendamment de leur type. Il est également important que la valeur conserve son type d'origine. Je dois étendre l'interface suivanteBesoin de créer une ConfigurationSection dynamique qui contient également le type

public interface IPreferencesBackend 
{ 
    bool TryGet<T>(string key, out T value); 
    bool TrySet<T>(string key, T value); 
} 

Lors de l'exécution, je peux dire quelque chose comme:

My.Foo.Data data = new My.Foo.Data("blabla"); 
Pref pref = new Preferences(); 
pref.TrySet("foo.data", data); 
pref.Save(); 

My.Foo.Data date = new My.Foo.Data(); 
pref.TryGet("foo.data", out data); 

J'ai essayé avec System.Configuration.Configuration.AppSettings, mais le problème avec ce qu'il stocke les paires clé-valeur dans un tableau de chaînes. Ce dont j'ai besoin, c'est d'avoir une implémentation de System.Configuration.ConfigurationSection, où je peux contrôler la façon dont le paramètre individuel est sérialisé. J'ai remarqué que les paramètres générés par Visual Studio font cela. Il utilise la réflexion pour créer toutes les clés de réglage. ce dont j'ai besoin est de faire ce temps d'exécution et dynamiquement.

[System.Configuration.UserScopedSettingAttribute()] 
[System.Diagnostics.DebuggerNonUserCodeAttribute()] 
[System.Configuration.DefaultSettingValueAttribute("2008-09-24")] 
public global::System.DateTime DateTime { 
    get { 
     return ((global::System.DateTime)(this["DateTime"])); 
     } 
    set { 
     this["DateTime"] = value; 
     } 
} 

Répondre

1

C'est tout ce que vous obtenez dans un fichier texte ASCII - chaînes. :-)

Cependant, vous pouvez coder les chaînes "valeur" pour inclure un paramètre de type comme:

<key="myParam" value="type, value" /> 

par exemple:

<key="payRate" value="money,85.79"/> 

ont ensuite votre application effectuer la conversion ..