21 votes

Section de configuration imbriquée app.config

Je ne trouve aucun exemple de la manière d'accéder à une telle section de configuration imbriquée dans un app.config.

  <my.configuration>
    <emailNotification>
      <to value="me@you.com" />
      <from value="he@you.com" />
      <subject value="Subject" />
      <smtpHost value="smtp.you.com" />
      <triggers>
        <add name="1" varAlias="Var1" lower="-200" upper="-150"/>
      </triggers>  
    </emailNotification>
  </my.configuration>

J'ai déjà utilisé ConfigurationElementCollection et ConfigurationElement. Mais je ne sais pas comment faire ce qui précède ?

37voto

Rest Wing Points 1594

Vous en avez besoin :

Definir my.configuration comme groupe de section et emailNotification comme une section au sein du groupe. Ajoutez ce qui suit au fichier de configuration :

<configSections>
    <sectionGroup name="my.configuration"
                  type="SectionGroupRetrieval.MyConfigurationGroup, SectionGroupRetrieval">
        <section name="emailNotification"
                 type="SectionGroupRetrieval.EmailNotificationSection, SectionGroupRetrieval" />
    </sectionGroup>       
</configSections>

Mettre en œuvre le groupe de sections de configuration ( my.configuration ).

public class MyConfigurationGroup : ConfigurationSectionGroup
{
    [ConfigurationProperty( "emailNotification" )]
    public EmailNotificationSection EmailNotification
    {
        get { return (EmailNotificationSection)base.Sections[ "emailNotification" ]; }
    }
}

Mettre en œuvre la section de configuration ( emailNotification ).

public class EmailNotificationSection : ConfigurationSection
{
    [ConfigurationProperty( "to" )]
    public ValueElement To
    {
        get { return (ValueElement)base[ "to" ]; }
    }

    [ConfigurationProperty( "from" )]
    public ValueElement From
    {
        get { return (ValueElement)base[ "from" ]; }
    }

    [ConfigurationProperty( "subject" )]
    public ValueElement Subject
    {
        get { return (ValueElement)base[ "subject" ]; }
    }

    [ConfigurationProperty( "smtpHost" )]
    public ValueElement SmtpHost
    {
        get { return (ValueElement)base[ "smtpHost" ]; }
    }

    [ConfigurationProperty( "triggers" )]
    public TriggerElementCollection Triggers
    {
        get { return (TriggerElementCollection)base[ "triggers" ]; }
    }
}

Mettre en œuvre les éléments de configuration nécessaires et la collecte des éléments de configuration.

public class ValueElement : ConfigurationElement
{
    [ConfigurationProperty( "value" )]
    public string Value
    {
        get { return (string)base[ "value" ]; }
        set { base[ "value" ] = value; }
    }
}

public class TriggerElement : ConfigurationElement
{
    [ConfigurationProperty( "name" )]
    public string Name
    {
        get { return (string)base[ "name" ]; }
        set { base[ "name" ] = value; }
    }

    [ConfigurationProperty( "varAlias" )]
    public string VarAlias
    {
        get { return (string)base[ "varAlias" ]; }
        set { base[ "varAlias" ] = value; }
    }

    [ConfigurationProperty( "lower" )]
    public int Lower
    {
        get { return (int)base[ "lower" ]; }
        set { base[ "lower" ] = value; }
    }

    [ConfigurationProperty( "upper" )]
    public int Upper
    {
        get { return (int)base[ "upper" ]; }
        set { base[ "upper" ] = value; }
    }
}

[ConfigurationCollection( typeof( TriggerElement ) )]
public class TriggerElementCollection : ConfigurationElementCollection
{
    public TriggerElement this[ string name ]
    {
        get { return (TriggerElement)base.BaseGet( name ); }
    }

    public TriggerElement this[ int index ]
    {
        get { return (TriggerElement)base.BaseGet( index ); }
    }

    protected override ConfigurationElement CreateNewElement()
    {
        return new TriggerElement();
    }

    protected override object GetElementKey( ConfigurationElement element )
    {
        return ( (TriggerElement)element ).Name;
    }
}

Après avoir mis à jour le fichier de configuration et implémenté les bits de configuration nécessaires, vous pouvez accéder à votre section comme suit :

Configuration config = ConfigurationManager.OpenExeConfiguration( ConfigurationUserLevel.None );
MyConfigurationGroup myConfiguration = (MyConfigurationGroup)config.GetSectionGroup( "my.configuration" );
EmailNotificationSection section = myConfiguration.EmailNotification;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X