2009-08-22 12 views
71

Quiero agregar una sección de configuración personalizada en mi archivo app.config. ¿Hay alguna manera de hacerlo y cómo puedo acceder a estas configuraciones en mi programa? siguiente es la sección de configuración quiero añadir a mi app.config:Cómo crear una sección de configuración personalizada en app.config?

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

Respuesta

120

Crear ConfigurationElement Empresa:

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

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

    } 

y también debe registrar su nueva sección de configuración en web.config (aprox. config):

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

continuación, se carga la configuración con

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

Vale la pena señalar que si está utilizando una aplicación MVC, entonces la sección de la lista está muy bien. Con una aplicación de consola, un servicio web y quizás otros, debe tener ', AssemblyName' después de 'blablabla.RegisterCompaniesConfig' – KevinDeus

+0

. Necesito especificar el ensamblado en el atributo de tipo de la etiqueta de sección – ilmatte

+0

. Recibo la excepción "no heredar de 'System.Configuration.IConfigurationSectionHandler' ... ¿qué estoy haciendo mal? – Oysio

9

Debe retirar serie de tres partes de Jon Rista en .NET 2.0 configuración arriba en CodeProject.

Muy recomendable, bien escrito y muy útil!

Le muestra muy claramente cómo escribir las clases necesarias (derivadas de ConfigurationElement y/o ConfigurationSection) para diseñar las secciones de configuración personalizada que necesita.

Cuestiones relacionadas