2011-06-01 40 views
7

Con el lanzamiento de .NET4, ¿alguna vez alguien ha creado un elemento web.config dinámico que simplemente te permita escribir lo que quieras en la configuración y luego puedes acceder a él desde un objeto dynamic?Forma gratuita Región web.config dinámica

La cantidad de trabajo que se dedica a crear secciones de configuración personalizadas es exagerada, aparentemente sin motivo. Esto me ha llevado a preguntarme si alguien ha reemplazado la canción y el baile de la necesidad de crear 5 o más clases para rodar una nueva sección de configuración cada vez.

(Nota, cuando digo de forma libre que, obviamente, esperar que se conforme a un elemento XML válido)

Respuesta

3

Si lo que desea es acceder a la sección appSettings del archivo de configuración, se puede heredar de la clase DynamicObject y anular el método TryGetMember:

public class DynamicSettings : DynamicObject { 
    public DynamicSettings(NameValueCollection settings) { 
     items = settings; 
    } 

    private readonly NameValueCollection items; 

    public override bool TryGetMember(GetMemberBinder binder, out object result) { 
     result = items.Get(binder.Name); 
     return result != null; 
    } 
} 

Entonces, suponiendo que esto es su archivo app.config:

<configuration> 
    <appSettings> 
    <add key="FavoriteNumber" value="3" /> 
    </appSettings> 
</configuration> 
...

ajuste 'FavoriteNumber' se podía acceder de esta manera:

class Program { 
    static void Main(string[] args) { 
     dynamic settings = new DynamicSettings(ConfigurationManager.AppSettings); 
     Console.WriteLine("The value of 'FavoriteNumber' is: " + settings.FavoriteNumber); 
    } 
} 

Tenga en cuenta que intentar tener acceso a una clave que es resultados no definidos en un RuntimeBinderException que son lanzados. Puede evitar esto cambiando el TryGetMember reemplazado para devolver siempre true, en cuyo caso las propiedades indefinidas simplemente devolverán null.

+0

+1 y acepto, estaba considerando crear un proyecto de FOSS sobre esto y me diste un punto de partida mucho menos efímero. –

Cuestiones relacionadas