2011-10-12 24 views
6

Ho un sacco di percorsi che voglio essere in grado di gettare nel mio file Web.Config. Ho bisogno di una chiave e due campi valore per ogni sezione/elemento nella collezione. Qualcosa sulla falsariga di questo ...Sezione/raccolta personalizzata in 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> 

è possibile?

risposta

2

Sì. E non troppo difficile una volta che hai un inizio.

È necessario creare una classe derivata ConfigurationSection per definire la sezione <routes> (e quindi aggiungere un <section> alla configurazione di collegare l'elemento <routes> al vostro tipo).

Avrai quindi bisogno di un tipo per definire ogni elemento della collezione e, contrassegnato come predefinito, una proprietà sul secondo tipo per la raccolta.

Dopo tutto questo è impostato, in fase di esecuzione si accede alla sezione di configurazione come:

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

Il mio blog ha un paio di articoli sul fondo a questo: http://blog.rjcox.co.uk/category/dev/net-core/

Come osservato in un altro answer lì è anche la copertura (molto meglio di una volta) su MSDN.

1

Se non si desidera creare una classe per rappresentare la vostra sezione di configurazione si può fare questo:

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

Conversione dinamica consente di accedere ai valori chiave in configSection. Potrebbe essere necessario aggiungere un punto di interruzione e un picco in configSection per vedere cosa c'è e cosa usare ValueKey.