2009-06-15 22 views
5

Ho le mie sezioni di configurazione personalizzate ma vorrei creare un nuovo elemento che abbia semplici valori chiave/valori al suo interno. Ora ho una versione funzionante ma sembra un bel po 'di codice per un compito così semplice. C'è un modo migliore di fare le cose?Come definire una sezione di configurazione personalizzata di base?

Di seguito è una versione ridotta della mia configurazione e classe di configurazione personalizzata.

web.config

<myRootNode> 
    <myNode> 
     <add key="a" value="" /> 
     <add key="b" value="" /> 
     <add key="c" value="" /> 
     ... 
    </myNode> 
    ...any other nodes 
</myRootNode> 

configurazione personalizzata Classe

public class MyRootNode : ConfigurationSection 
{ 
    [ConfigurationProperty("myNode")] 
    public MyNodeElement MyNode 
    { 
     get { return (MyNodeElement)this["myNode"]; } 
    } 
} 

[ConfigurationCollection(typeof(BaseElement), AddItemName = "add")] 
public class MyNodeElement : ConfigurationElementCollection 
{ 
    protected override ConfigurationElement CreateNewElement() 
    { 
     return new BaseElement(); 
    } 

    protected override object GetElementKey(ConfigurationElement element) 
    { 
     return ((BaseElement)element).Key; 
    } 

    public BaseElement this[int index] 
    { 
     get { return this.BaseGet(index) as BaseElement; } 
    } 
} 

public class BaseElement : ConfigurationElement 
{ 
    [ConfigurationProperty("key", IsRequired = true, IsKey = true)] 
    public string Key 
    { 
     get { return this["key"].ToString(); } 
    } 

    [ConfigurationProperty("value", IsRequired = true)] 
    public string Value 
    { 
     get { return this["value"].ToString(); } 
    } 
} 
+0

Prova questo articolo: [Scrittura della sezione Impostazioni di configurazione personalizzate in C#] (http://www.codearsenal.net/2012/10/writing-custom-configuration-section-in-csharp.html) –

risposta

9

Qualcosa di simile credo:

<configSections> 
     <section name="validationXsds" type="System.Configuration.DictionarySectionHandler, System" /> 
    </configSections> 


    <validationXsds> 
    <add key="http://schemas.xmlsoap.org/soap/envelope/" value="http://dev.ei.directv.com/schemas/xmlsoap/envelope.xsd"/> 
    <add key="http://schemas.xmlsoap.org/soap/encoding/" value="http://dev.ei.directv.com/schemas/xmlsoap/encoding.xsd"/> 
    <add key="http://ei.directv.com/schemas/envelope/v3_0" value="http://dev.ei.directv.com/schemas/envelope/v3.0/Envelope.xsd"/> 
    </validationXsds> 

IDictionary xsds = (IDictionary)WebConfigurationManager.GetSection("validationXsds"); 

Aggiornamento: in .NET 4.0 sto usando

type="System.Configuration.NameValueSectionHandler, System, Version=4.0.0.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" 
6

Effettuare questa operazione manualmente richiede troppi sforzi. Puoi fare in modo che Visual Studio crei la sezione per te con il componente aggiuntivo Configuration Section Designer.

+0

Richiede Visual Stuiod 2008 o maggiore. – David

+3

In realtà, VS 2010 non è ancora supportato. : o ( – Boydski

+0

codice alfa e Chrome pensa che sia dannoso. – stuartdotnet

Problemi correlati