Besoin de créer une ConfigurationSection dynamique qui contient également le type
-
02-07-2019 - |
Question
Je dois créer une section de configuration capable de stocker des paires clé-valeur dans un fichier app.config. Les paires clé-valeur peuvent être ajoutées à l'exécution, quel que soit leur type. Il est également important que la valeur conserve son type d'origine. J'ai besoin d'étendre l'interface suivante
public interface IPreferencesBackend
{
bool TryGet<T>(string key, out T value);
bool TrySet<T>(string key, T value);
}
Au moment 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, c'est qu'il stocke les paires clé-valeur dans un tableau de chaînes.
Ce dont j'ai besoin, c'est d'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 le font en quelque sorte. Il utilise la réflexion pour créer toutes les clés de réglage. ce dont j'ai besoin, c'est de faire ce runtime de manière dynamique.
[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;
}
}
La solution 2
J'ai trouvé deux articles intéressants sur codeproject.com qui expliquent ces problèmes en détail.
Résoudre les mystères de la configuration .NET 2.0 http://www.codeproject.com/KB/dotnet/mysteriesofconfiguration.aspx
Autres conseils
Phil Haack a publié un excellent article sur Création de sections de configuration personnalisées
C'est tout ce que vous obtenez dans un fichier texte ASCII - des chaînes. : -)
Cependant, vous pouvez encoder la "valeur". chaînes pour inclure un paramètre de type tel que:
<key="myParam" value="type, value" />
par exemple:
<key="payRate" value="money,85.79"/>
demandez ensuite à votre application de faire la conversion ...