2011-10-12 12 views
6

Tengo un montón de rutas que quiero poder lanzar en mi archivo Web.Config. Necesito una clave y dos campos de valor para cada sección/elemento en la colección. Algo en la línea de esto ...Sección/colección personalizada en Web.Config

<routes> 
    <add 
     key="AdministrationDefault" 
     url="Administration/" 
     file="~Administration/Default.aspx" /> 

    <add 
     key="AdministrationCreateCampaign" 
     url="Administration/CreateCampaign/" 
     file="~/Administration/CreateCampaign.aspx" /> 

    <add 
     key="AdministrationLogout" 
     url="Administration/Leave/" 
     file="~/Administration/Leave.aspx" /> 
</routes> 

¿Esto es posible?

Respuesta

2

Sí. Y no demasiado duro una vez que tienes un comienzo.

Tendrá que crear una clase derivada ConfigurationSection para definir la sección <routes> (y luego añadir un <section> a la configuración de vincular el elemento <routes> a su tipo).

A continuación, necesitará un tipo para definir cada elemento de la colección y, marcado como predeterminado, una propiedad en su segundo tipo para la colección.

Después de todo esto está configurado, en tiempo de ejecución permite acceder a su sección de configuración como:

var myRoutes = ConfigurationManager.GetSection("routes") as RoutesConfigSection; 

Mi blog tiene algunos artículos sobre los antecedentes de esta: http://blog.rjcox.co.uk/category/dev/net-core/

Como se señaló en otro answer existe también es cobertura (mucho mejor de lo que solía ser) en MSDN.

1

Si no desea crear una clase para representar a su sección de configuración se puede hacer esto:

var configSection = ConfigurationManager.GetSection("sectionGroup/sectionName"); 
var aValue = (configSection as dynamic)["ValueKey"]; 

la conversión a dinámico le permite acceder a los valores clave en configSection. Puede que tenga que agregar un punto de ruptura y un pico en configSection para ver qué hay allí y qué ValueKey usar.