Pergunta

Eu preciso criar uma seção de configuração, que é capaz de armazenar pares chave-valor em um arquivo app.config e os pares chave-valor pode ser adicionado tempo de execução independentemente do seu tipo. Também é importante que o valor mantém seu tipo original. Eu preciso estender a seguinte interface

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

No momento da execução, posso dizer algo como:

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);

Eu tentei com System.Configuration.Configuration.AppSettings, mas o problema com isso que ele está armazenando os pares chave-valor em uma matriz de cadeia.

O que eu preciso é ter uma implementação de System.Configuration.ConfigurationSection, onde posso controlar a forma como o ajuste individual é serializado. Notei que as configurações geradas pelo Visual tipo estúdio de fazer isso. Ele está usando a reflexão para criar todas as chaves de ajuste. o que eu preciso é fazer isso em tempo de execução e dinamicamente.

[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;
       }
 }
Foi útil?

Solução 2

Eu encontrei dois grandes artigos em codeproject.com que estão explicando estas questões em grande detalhe.

Desvendando os Mistérios do .NET 2.0 Configuration http://www.codeproject.com/KB/dotnet/mysteriesofconfiguration.aspx

Configurações Aplicada Usuário 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

Outras dicas

Phil Haack tem um ótimo artigo sobre Criação de seções de configuração personalizada

Isso é tudo o que você entrar em um um arquivo de texto ASCII - cordas. : -)

No entanto, você pode codificar as cordas de "valor" para incluir um parâmetro de tipo como:

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

Por exemplo:

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

, em seguida, ter seu aplicativo fazer a conversão ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top