キーと値のペアを app.config ファイルに保存できる構成セクションを作成する必要があります。キーと値のペアは、タイプに関係なく実行時に追加できます。値が元の型を保持することも重要です。次のインターフェースを拡張する必要があります
public interface IPreferencesBackend
{
bool TryGet<T>(string key, out T value);
bool TrySet<T>(string key, T value);
}
実行時には、次のように言えます。
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);
System.Configuration.Configuration.AppSettings を試してみましたが、キーと値のペアを文字列配列に格納しているという問題があります。
必要なのは、System.Configuration.ConfigurationSection を実装することです。ここで、個々の設定をシリアル化する方法を制御できます。Visual Studio によって生成された設定がこれを行うことに気付きました。リフレクションを使用してすべての設定キーを作成しています。私が必要とするのは、このランタイムを動的に実行することです。
[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;
}
}