web-dev-qa-db-fra.com

Comment créer une section de configuration personnalisée dans app.config?

Je souhaite ajouter une section de configuration personnalisée à mon app.config fichier. Y at-il un moyen de le faire et comment puis-je accéder à ces paramètres dans mon programme. Voici la section de configuration que je souhaite ajouter à mon app.config:

<RegisterCompanies>
    <Companies>
      <Company name="Tata Motors" code="Tata"/>
      <Company name="Honda Motors" code="Honda"/>
    </Companies>
</RegisterCompanies>
88
Embedd_Khurja

Importer un espace de noms:

using System.Configuration;

Créer une entreprise ConfigurationElement:

public class Company : ConfigurationElement
{

        [ConfigurationProperty("name", IsRequired = true)]
        public string Name
        {
            get
            {
                return this["name"] as string;
            }
        }
            [ConfigurationProperty("code", IsRequired = true)]
        public string Code
        {
            get
            {
                return this["code"] as string;
            }
        }
}

ConfigurationElementCollection:

public class Companies
        : ConfigurationElementCollection
    {
        public Company this[int index]
        {
            get
            {
                return base.BaseGet(index) as Company ;
            }
            set
            {
                if (base.BaseGet(index) != null)
                {
                    base.BaseRemoveAt(index);
                }
                this.BaseAdd(index, value);
            }
        }

       public new Company this[string responseString]
       {
            get { return (Company) BaseGet(responseString); }
            set
            {
                if(BaseGet(responseString) != null)
                {
                    BaseRemoveAt(BaseIndexOf(BaseGet(responseString)));
                }
                BaseAdd(value);
            }
        }

        protected override System.Configuration.ConfigurationElement CreateNewElement()
        {
            return new Company();
        }

        protected override object GetElementKey(System.Configuration.ConfigurationElement element)
        {
            return ((Company)element).Name;
        }
    }

et ConfigurationSection:

public class RegisterCompaniesConfig
        : ConfigurationSection
    {

        public static RegisterCompaniesConfig GetConfig()
        {
            return (RegisterCompaniesConfig)System.Configuration.ConfigurationManager.GetSection("RegisterCompanies") ?? new RegisterCompaniesConfig();
        }

        [System.Configuration.ConfigurationProperty("Companies")]
            [ConfigurationCollection(typeof(Companies), AddItemName = "Company")]
        public Companies Companies
        {
            get
            {
                object o = this["Companies"];
                return o as Companies ;
            }
        }

    }

et vous devez également enregistrer votre nouvelle section de configuration dans web.config (app.config):

<configuration>       
    <configSections>
          <section name="Companies" type="blablabla.RegisterCompaniesConfig" ..>

alors vous chargez votre config avec

var config = RegisterCompaniesConfig.GetConfig();
foreach(var item in config.Companies)
{
   do something ..
}
142
Jan Remunda

Vous devriez consulter la série en trois parties de Jon Rista sur la configuration .NET 2.0 sur CodeProject.

Fortement recommandé, bien écrit et extrêmement utile!

Il vous montre très clairement comment écrire les classes nécessaires (dérivées de ConfigurationElement et/ou ConfigurationSection) afin de concevoir les sections de configuration personnalisées dont vous avez besoin.

9
marc_s