2010-09-10 7 views
9

Algunos de los que hago bastante son los enteros de lectura desde AppSettings. ¿Cuál es la mejor manera de hacer esto?Leyendo enteros desde AppSettings una y otra vez

En lugar de hacer esto cada vez:

int page_size; 
if (int.TryParse(ConfigurationManager.AppSettings["PAGE_SIZE"], out page_size){ 

} 

estoy pensando un método en mi clase Helpers así:

int GetSettingInt(string key) { 
    int i; 
    return int.TryParse(ConfigurationManager.AppSettings[key], out i) ? i : -1; 
} 

pero esto es sólo para ahorrar algunos golpes de teclado.

Idealmente, me encantaría ponerlos a todos en un tipo de estructura que podría usar intellisense para no terminar con errores de tiempo de ejecución, pero no sé cómo abordaría esto ... o si esto es posible.

¿Cuál es una forma de mejores prácticas para obtener y leer enteros desde la sección AppSettings de Web.Config?

una cosa más ...

no sería una buena idea establecer esto como readonly?

readonly int pageSize = Helpers.GetSettingInt("PAGE_SIZE") parece que no funciona.

+0

Lo siento, mi error, no me había dado cuenta de que era específico de WinForms. –

+0

no hay problema. Sin embargo, su enlace 'Readonly' fue útil. Debería haber sido más claro que era para la Web ... ya que me doy cuenta de que WinForms usa "AppSettings" mientras que estoy hablando de la Sección AppSettings de la Web.Config – Armstrongest

Respuesta

12

He encontrado una respuesta a mi problema. Implica trabajo adicional al principio, pero al final, reducirá los errores.

Se encuentra en Scott Allen's blog OdeToCode y aquí está mi aplicación:

crear una clase estática llamada Config

public static class Config { 

    public static int PageSize { 
     get { return int.Parse(ConfigurationManager.AppSettings["PAGE_SIZE"]); } 
    } 
    public static int HighlightedProductId { 
    get { 
     return int.Parse(ConfigurationManager.AppSettings["HIGHLIGHT_PID"]); 
    } 
    } 
} 

ventaja de hacer esto son tres veces:

  • Intellisense
  • Un punto de interrupción (DRY)
  • Como solo estoy escribiendo Config String UNA VEZ, hago un int.Parse regular.

Si alguien cambia la clave AppSetting, se romperá, pero puedo manejar eso, ya que esos valores no se cambian y el rendimiento es mejor que un TryParse y puede ser fijo en un solo lugar.

La solución es tan simple ... No sé por qué no pensé en eso antes. Llame a los valores de la siguiente manera:

Config.PageSize 

Config.HighlightedProductId 

Yay!

+0

Si bien esta parece ser la mejor manera de manejar este problema en particular, no sé si puedes llamar a este DRY. Cada entero nuevo que agregue requiere una clave 'Web.Config' y una propiedad de clase' Config'. Si no necesita la potencia de las transformaciones 'Web.Config' (poco probable, porque son útiles), podría ponerlas todas directamente en la clase Config/Constants, y omitir la necesidad de int.Parse () – arserbin3

+0

¿Qué sucede si el usuario pone una cadena en la configuración de la aplicación? Esto arrojaría una excepción, y no hay manejo de excepciones o configuración predeterminada. – SharpC

-1

Para evitar crear una clase de bicicleta, podría usar;

System.Configuration.Abstractions method .AppSettings.AppSetting<int>("intKey");https://github.com/davidwhitney/System.Configuration.Abstractions 
0

Eche un vistazo a T4Config. Generaré una interfaz y una implementación concreta de sus aplicaciones y secciones de conexión de la configuración de su web/aplicación utilizando la carga lenta de los valores en los tipos de datos adecuados. Utiliza una plantilla T4 simple para generar cosas automáticamente para usted.

Cuestiones relacionadas