Мне нужно создать раздел конфигурации, в котором можно хранить пары ключ-значение в файле 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;
}
}