Необходимо создать динамический ConfigurationSection, который также содержит тип - PullRequest
2 голосов
/ 24 сентября 2008

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

Ответы [ 3 ]

2 голосов
/ 28 сентября 2008

Я нашел две замечательные статьи на codeproject.com, которые объясняют эти проблемы очень подробно.

Раскрытие тайн конфигурации .NET 2.0 http://www.codeproject.com/KB/dotnet/mysteriesofconfiguration.aspx

Настройки пользователя применены http://www.codeproject.com/KB/dotnet/user_settings.aspx?display=PrintAll&fid=1286606&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=2647446&fr=26

2 голосов
/ 24 сентября 2008
1 голос
/ 24 сентября 2008

Это все, что вы получаете в текстовом файле ASCII - строки. : -)

Однако вы можете закодировать строки «value» для включения параметра типа, например:

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

например:

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

тогда ваше приложение выполнит преобразование ...

...