ASP.NET Core, nuevo modelo de configuración

Hello world!

Con la llegada de core a nuestras vidas, una de las cosas que mas “choca” es ver que ya no tenemos web.config. Con lo que lo mas normal es que nos asalten varias dudas, como por ejemplo: ¿Donde configuro ahora mi cadena de conexión a la base de datos? o ¿Dónde puedo poner todas mis keys de configuración de mi web?…

La respuesta es simple: HELLO appsettings.json!! En el momento que estamos en el mundo del desarrollo, dominado por las “apis” y los “jsons”, el viejo modelo de XML por el que se regía el web.config (trabajaba como un diccionario Key-Value) se ha quedado obsoleto, con lo que Microsoft con la llegada de ASP.NET core se ha decidido por un nuevo sistema de configuración para nuestras aplicaciones basado en un json, que como ya sabéis, es menos pesado, mas legible y sobre todo mas estructurado.

Hecha esta breve introducción, vamos al tema. Lo primero que nos vamos a encontrar en nuestra nueva aplicación en core es un appsettings.json el cual tendrá el siguiente formato:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "Smtp": {
    "Server": "0.0.0.1",
    "User": "nfanjul@pasiona.com",
    "Pass": "123456789",
    "Port": "25"
  }
}

Como podéis ver, ya le he incluido una configuración para un servidor smtp, en este post nos centraremos en como recoger estos valores desde nuestra aplicación.

Lo primero que deberemos hacer es crearnos un modelo con las propiedades que hemos puesto en nuestra configuración, este modelo será donde se mapearán los valores que hayamos configurado en nuestro appsettings.json:

public class Smtp
    {
        public string Server { get; }
        public string User { get; }
        public string Pass { get; }
        public int Port { get; }
    }

El siguiente paso será irnos a la clase startup y en su constructor añadir nuestro appsettings.json: 

public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();
            Configuration = builder.Build();
        }

En este código podemos ver varias cosas interesantes:

  • Parámetro “optional”: Aquí podremos decir si el appsettings.json es obligatorio o no.
  • Parámetro “reloadOnChange”: Especificaremos si queremos que se recargue la aplicación cuando hagamos cambios en los settings.
  • Segundo “addJsonFile”: ahí podríamos tener un segundo settings para la gestión de nuestros settings locales, y dado que la ejecución de este constructor es secuencial machacaría el appsettings.json principal con nuestros settings locales. Esto nos facilitará el poder tener conexiones a nuestras bases de datos locales. Gestionar esto desde el web.config era un poco í ya q tendríamos que utilizar el famoso “Templating” que tantos dolores de cabeza nos dio en su momento. Por otro lado, al ser opcional no pasará nada si no existe, pudiendo así no tenerlo subido a nuestro repositorio de código.

Continuemos… Una vez visto esto, queda realmente ver como leemos ese appsettings.json. Cuando trabajábamos con el web.config tirábamos de la clase ConfigurationManager , ahora en core también tendremos un helper para cargar esto y poder tenerlo accesible desde todo el ciclo de vida de la aplicación sin tener que utilizar librerías de terceros para el tratamiento de json (ej: Newtonsoft). Para ello en la misma clase startup tendremos el método ConfigureServices  desde el cual podremos resolver la carga de nuestros settings de la siguiente manera:

public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();
            services.Configure<Smtp>(Configuration.GetSection("Smtp"));
        }

Donde le especificaremos:

  • <Smtp>: Nuestro modelo de datos creado para estos settings.
  • Configuration.GetSection(“Smtp”): al GetSection le pasaremos nombre de la propiedad del json que queremos cargar.

Con habéis podido ver, esta nueva forma de tener nuestros settings es mucho mas limpia, ya que podríamos crearnos tantas secciones como quisiéramos para poder tener agrupados todos los settings por funcionalidad.

Con esto y un bizcocho… Saludos y hasta pronto!

ASP.NET Core, nuevo modelo de configuración

Presentación…

Hello world,

Después de un tiempo apartado del mundo de los blogs, me ha vuelto a picar el gusanillo de volver a escribir. Lo primero que haré será traspasar las entradas de mi viejo blog a este.

Una vez hecho esta breve introducción, me voy a presentar. Soy Nacho Fanjul, Senior developer en tecnología .NET en el departamento de proyectos de Pasiona, llevo en este mundo de la programación casi 10 años y como os podéis imaginar me las he encontrado de todos los colores… No voy a entrar a repasar mi trayectoria profesional, para eso podéis visitar mi “LinkedIn”, sí que resumiré lo que llevo haciendo los últimos tiempos.

Me he especializado en desarrollo de aplicaciones web, desarrollando principalmente con MVC, aunque también me ha tocado “pelearme” con webForms. En cuanto a la parte de “BackEnd”, he ido acumulando experiencia en codeFirst, Entity Framework, arquitecturas DDD, etc…

Últimamente, me estoy introduciendo en el mundillo de azure, donde aún me queda un largo recorrido…

¿Qué encontrareis en este blog?

Esto es simple, iré poniendo las cosillas que me vaya encontrando en el día a día, o simplemente cosas nuevas que vaya aprendiendo.

En fin, no me enrollo más, solo deciros que espero que este blog os resulte útil, y podáis aprender algo y que yo también aprenda algo!

Saludos a tod@s!

 

Presentación…