Necessidade de criar um ConfigurationSection dinâmica que também detém o tipo
-
02-07-2019 - |
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;
}
}
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 ...