Necesita crear una sección de configuración dinámica que también contenga el tipo
-
02-07-2019 - |
Pregunta
Necesito crear una sección de configuración que pueda almacenar pares clave-valor en un archivo app.config y los pares clave-valor se puedan agregar en tiempo de ejecución independientemente de su tipo.También es importante que el valor mantenga su tipo original.Necesito extender la siguiente interfaz
public interface IPreferencesBackend
{
bool TryGet<T>(string key, out T value);
bool TrySet<T>(string key, T value);
}
En tiempo de ejecución, puedo decir 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);
Lo intenté con System.Configuration.Configuration.AppSettings, pero el problema es que almacena los pares clave-valor en una matriz de cadenas.
Lo que necesito es tener una implementación de System.Configuration.ConfigurationSection, donde pueda controlar cómo se serializa la configuración individual.Noté que la configuración generada por Visual Studio hace esto.Está utilizando la reflexión para crear todas las claves de configuración.lo que necesito es hacer este tiempo de ejecución y de forma dinámica.
[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;
}
}
Solución 2
Encontré dos excelentes artículos en codeproject.com que explican estos problemas con gran detalle.
Desentrañando los misterios de la configuración de .NET 2.0http://www.codeproject.com/KB/dotnet/mysteriesofconfiguration.aspx
Configuración de usuario aplicadahttp://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
Otros consejos
Phil Haack tiene un gran artículo sobre Crear secciones de configuración personalizadas
Eso es todo lo que obtienes en un archivo de texto ASCII: cadenas.:-)
Sin embargo, puede codificar las cadenas de "valor" para incluir un parámetro de tipo como:
<key="myParam" value="type, value" />
Por ejemplo:
<key="payRate" value="money,85.79"/>
luego haz que tu aplicación haga la conversión...