2009-06-15 5 views
5

J'ai mes propres sections de configuration personnalisées, mais je voudrais créer un nouvel élément qui contient des valeurs/clés simples. Maintenant, j'ai une version de travail, mais il semble beaucoup de code pour une tâche aussi simple. Y a-t-il une façon améliorée de faire les choses?Comment définir une section de configuration personnalisée de base?

Ci-dessous est une version effacée de ma classe de configuration personnalisée et config.

web.config

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

Configuration personnalisée 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

Essayez cet article: [Rédaction de la section des paramètres de configuration personnalisés en C#] (http://www.codearsenal.net/2012/10/writing-custom-configuration-section-in-csharp.html) –

Répondre

9

Quelque chose comme ça je suppose:

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

Mise à jour: la version 4.0 .NET J'utilise

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

Faire cela manuellement nécessite beaucoup trop d'efforts. Visual Studio peut créer la section pour vous avec le complément Configuration Section Designer.

+0

Nécessite Visual Stuiod 2008 ou plus grand. – David

+3

En fait, VS 2010 n'est pas encore supporté. : o ( – Boydski

+0

Alpha code et Chrome pense que c'est malveillant. – stuartdotnet