[c#] Lectura de configuraciones desde app.config o web.config en .net



Answers

Para Sample App.config como a continuación:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="countoffiles" value="7" />
    <add key="logfilelocation" value="abc.txt" />
  </appSettings>
</configuration>

Usted lee la configuración de la aplicación anterior usando el código que se muestra a continuación:

using System.Configuration;

También es posible que deba agregar una referencia a System.Configuration en su proyecto si todavía no hay uno. A continuación, puede acceder a los valores de esta manera:

string configvalue1 = ConfigurationManager.AppSettings["countoffiles"];
string configvalue2 = ConfigurationManager.AppSettings["logfilelocation"];

¡Espero que esto ayude!

Question

Estoy trabajando en una biblioteca de clase C # que necesita poder leer configuraciones del web.config o app.config (dependiendo de si se hace referencia a la DLL desde una aplicación web ASP.NET o una aplicación de Windows Forms).

He encontrado eso

ConfigurationSettings.AppSettings.Get("MySetting")

funciona, pero ese código ha sido marcado como obsoleto por Microsoft.

He leído que debería estar usando:

ConfigurationManager.AppSettings["MySetting"]

Sin embargo, la clase System.Configuration.ConfigurationManager no parece estar disponible desde un proyecto de Biblioteca de clases C #.

¿Alguien sabe cuál es la mejor manera de hacer esto?




Otra posible solución:

var MyReader = new System.Configuration.AppSettingsReader();
string keyvalue = MyReader.GetValue("keyalue",typeof(string)).ToString();



Como encontré el mejor enfoque para acceder a las variables de configuración de la aplicación de manera sistemática al crear una clase contenedora sobre System.Configuration como se muestra a continuación

public class BaseConfiguration
    {
        protected static object GetAppSetting(Type expectedType, string key)
        {
            string value = ConfigurationManager.AppSettings.Get(key);
            try
            {
                if (expectedType == typeof(int))
                    return int.Parse(value);
                if (expectedType == typeof(string))
                    return value;

                throw new Exception("Type not supported.");
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("Config key:{0} was expected to be of type {1} but was not.",
                    key, expectedType), ex);
            }
        }
    }

Ahora podemos acceder a las variables de configuración necesarias por nombres codificados usando otra clase como se muestra a continuación

public class ConfigurationSettings:BaseConfiguration
    {
        #region App setting

        public static string ApplicationName
        {
            get { return (string)GetAppSetting(typeof(string), "ApplicationName"); }
        }

        public static string MailBccAddress
        {
            get { return (string)GetAppSetting(typeof(string), "MailBccAddress"); }
        }

        public static string DefaultConnection
        {
            get { return (string)GetAppSetting(typeof(string), "DefaultConnection"); }
        }

        #endregion App setting

        #region global setting



        #endregion global setting
    }



Prueba esto:

string keyvalue=System.Configuration.ConfigurationManager.AppSettings["keyname"];

En web.config debe ser la siguiente estructura:

<configuration>
<appSettings>
<add key="keyname" value="keyvalue" />
</appSettings>
</configuration>



Leer desde la configuración:

Deberá agregar una referencia a Config

  1. Abra "Propiedades" en su proyecto
  2. Ir a la pestaña "Configuración"
  3. Agregar "Nombre" y "Valor"
  4. Obtenga valor con el uso del siguiente código:

    string value = Properties.Settings.Default.keyname;

Guardar en Config:

   Properties.Settings.Default.keyName = value;
   Properties.Settings.Default.Save();



Haga clic derecho en la biblioteca de su clase, y elija la opción "Agregar referencias" del menú; y finalmente desde la pestaña .NET, seleccione System.Configuration. Esto incluiría System.Configuration dll en su proyecto.




Recomiendo encarecidamente que cree un Contenedor para esta llamada. Algo así como un ConfigurationReaderService y usa la inyección de dependencia para obtener esta clase. De esta manera, podrá aislar estos archivos de configuración para fines de prueba.

Entonces use ConfigurationManager.AppSettings["something"]; sugirió y devuelve este valor. Con este método puede crear algún tipo de retorno predeterminado si no hay una clave disponible en el archivo .config.




Debe agregar al proyecto una referencia al ensamblaje System.Configuration.




Siempre creo una interfaz IConfig con propiedades de seguridad para todos los valores de configuración. Una clase de implementación de configuración luego envuelve las llamadas a System.Configuration. Todas las llamadas a System.Configuration están ahora en un lugar mucho más sencillo y más limpio para mantener y rastrear qué campos se están utilizando y declarar sus valores predeterminados. Escribo un conjunto de métodos de ayuda privada para leer y analizar tipos de datos comunes.

Utilizando un marco IoC, puede acceder a los campos IConfig desde cualquier lugar en su aplicación simplemente pasando la interfaz a un constructor de clase. También puede crear implementaciones simuladas de la interfaz IConfig en las pruebas de su unidad para que pueda probar varios valores de configuración y combinaciones de valores sin necesidad de tocar su archivo App.config o Web.config.




Links