2009-08-22 24 views
71

Chcę dodać niestandardową sekcję konfiguracji w moim pliku app.config. Czy jest sposób, aby to zrobić i jak uzyskać dostęp do tych ustawień w moim programie. Poniżej znajduje się sekcja config chcę dodać do mojego app.config:Jak utworzyć niestandardową sekcję konfiguracji w app.config?

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

Odpowiedz

120

Tworzenie ConfigurationElement firmą:

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; 
     } 
    } 

i 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 ; 
      } 
     } 

    } 

i trzeba też zarejestrować swoją nową sekcję konfiguracji w pliku web.config (APP. config):

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

następnie załadować config z

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

warto zauważyć, że w przypadku korzystania z aplikacji MVC, następnie odcinek wymienione jest w porządku. Z aplikacją konsoli, usługą sieci Web i być może innymi, musisz mieć ', AssemblyName' po 'blablabla.RegisterCompaniesConfig' – KevinDeus

+0

Musisz określić zestaw w atrybucie type znacznika sekcji – ilmatte

+0

Otrzymuję wyjątek "nie ma dziedziczą z "System.Configuration.IConfigurationSectionHandler" .. co robię źle? – Oysio

9

Powinieneś sprawdzić trzyczęściową serię Jon Rista jest na konfigurację .NET 2.0 aż na CodeProject.

Gorąco polecam, dobrze napisana i bardzo pomocny!

Pokazuje bardzo jasno, jak pisać niezbędne klasy (pochodzące z ConfigurationElement i/lub ConfigurationSection) w celu zaprojektowania niestandardowych sekcji konfiguracji, których potrzebujesz.

Powiązane problemy