2009-08-22 4 views
71

Je veux ajouter une section de configuration personnalisée dans mon fichier app.config. Y at-il un moyen de le faire et comment puis-je accéder à ces paramètres dans mon programme. la section qui suit est de config que je veux ajouter à mon app.config:Comment créer une section de configuration personnalisée dans app.config?

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

Répondre

120

Créer ConfigurationElement Société:

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 à web.config (app. config):

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

vous chargez votre config avec

var config = RegisterCompaniesConfig.GetConfig(); 
foreach(var item in config.Companies) 
{ 
    do something .. 
} 
+14

est utile de noter que si vous utilisez une application MVC, la section est très bien cotée. Avec une application console, Web Service, et peut-être d'autres, vous devez avoir ', AssemblyName' après 'blablabla.RegisterCompaniesConfig' – KevinDeus

+0

Besoin de spécifier l'assembly dans l'attribut type de la section tag – ilmatte

+0

Je reçois l'exception "ne pas hériter de 'System.Configuration.IConfigurationSectionHandler ".. qu'est-ce que je fais mal? – Oysio

9

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

Hautement recommandé, bien écrit et très utile!

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

Questions connexes