2009-06-15 19 views
5

Tengo mis propias secciones de configuración personalizadas pero me gustaría crear un nuevo elemento que tenga claves/valores simples dentro de él. Ahora tengo una versión que funciona pero parece bastante código para una tarea tan simple. ¿Hay una forma mejorada de hacer las cosas?¿Cómo se define una sección básica de configuración personalizada?

A continuación se muestra una versión eliminada de mi configuración y clase de configuración personalizada.

Clase web.config

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

configuración personalizada

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

Pruebe este artículo: [Escribir la sección Configuración de configuración personalizada en C#] (http://www.codearsenal.net/2012/10/writing-custom-configuration-section-in-csharp.html) –

Respuesta

9

Algo como esto supongo:

<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"); 

Actualización: en .NET 4.0 que estoy usando

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

Hacer esto manualmente requiere demasiado esfuerzo. Puede hacer que Visual Studio cree la sección para usted con el complemento Configuration Section Designer.

+0

Requiere Visual Stuiod 2008 o mayor. – David

+3

En realidad, VS 2010 aún no es compatible. : o ( – Boydski

+0

código alfa y Chrome cree que es malicioso. – stuartdotnet

Cuestiones relacionadas