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;
       }
 }
¿Fue útil?

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...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top