Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

17 años online

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
martes, 9 de junio de 2015
ASP.NET CoreLa verdad es que el nuevo sistema de configuración de ASP.NET Core tiene bastante buena pinta. Es potente, muy flexible y es bastante fácil de extender si tuviéramos necesidad de hacerlo.

Independientemente del proveedor que elijamos para almacenar los settings (un archivo JSON, un .INI, o el que sea), el acceso a la información siempre se realiza utilizando una cadena de caracteres hasta llegar al valor deseado de la configuración, como podemos observar en el siguiente ejemplo:



Sin embargo, esto puede ser una fuente de problemas, pues obviamente estas cadenas no son sometidas a ningún tipo de control en compilación y cualquier cambio de estructura o nombre de setting en el archivo de configuración podría provocar comportamientos incorrectos en nuestra aplicación.


Por ejemplo, si en algún momento decidiéramos cambiar “Name” por “FullName” en el archivo de configuración, nos veríamos obligados a buscar en toda la aplicación las apariciones de caracteres como “AppSettings:Name” y sustituirlos por “AppSettings:FullName”. Pero lo que es peor, tendríamos que acordarnos de hacerlo, y esto sí que es difícil ;)

Existe una fórmula muy sencilla para conseguir acceso tipado a las configuraciones de la aplicación utilizando el sistema integrado de inyección de dependencias de ASP.NET. Para ello, lo primero que tenemos que hacer es crear una clase cuyas propiedades coincidan con los settings de la aplicación, como la siguiente:

AppSettings en la carpeta Propertiesimage

Por supuesto, el nombre de la clase puede ser el que más nos guste, en el ejemplo usamos AppSettings sólo por recordar viejos tiempos ;) Curiosamente, en la plantilla de aplicación web ASP.NET Core esta clase aparece definida en la carpeta “Properties” del proyecto, como se aprecia en la captura de pantalla lateral, supongo que por mantener una cierta semejanza con las versiones anteriores de ASP.NET. Pero realmente no hay necesidad de hacerlo así y podemos ubicar la clase en la carpeta que estimemos oportuna.

A continuación, en el método ConfigureServices() de la clase Startup, registramos la clase AppSettings para hacerla accesible utilizando el motor de inyección de dependencias. Observad que en la llamada a Configure() especificamos el nodo en el que podemos encontrar los valores de los settings que poblarán automáticamente las propiedades de nuestra clase:

Registro de AppSettings

Actualizado 20/06/2015: en la beta5, GetSubKey() ha sido renombrado a GetConfigurationSection().

Actualizado 1/09/2015: en beta7, GetConfigurationSection() ha sido renombrado a GetSection(). ¡Esto es un no parar!

Pero en realidad esto no registra realmente la clase AppSettings en el contenedor de dependencias, sino el tipo IOptions<AppSettings>. Es un detalle a tener en cuenta porque es el tipo que tendremos que utilizar cuando desde nuestra aplicación necesitemos acceder a los datos de configuración utilizando cualquiera de los “sabores” de inyección de dependencias disponibles. El tipo IOptions<T> es un interfaz definido en el espacio Microsoft.Framework.OptionsModel y su miembro más interesante es la propiedad Options, a través de la cual accederemos las propiedades del objeto AppSettings, que contendrá los valores obtenidos automáticamente desde el archivo de configuración.

Así, podríamos obtener un objeto IOptions<AppSettings> como parámetro inyectado en el constructor de un controlador, y usarlo para tener acceso tipado a los settings:

Uso de settings desde acciones

O bien utilizar inyección de propiedades, también  nivel de clase controladora:

Uso de settings desde acciones

Incluso inyección de parámetros en acciones, por si sólo necesitamos acceder a la instancia de AppSettings desde una acción concreta:

Uso de settings desde acciones

Y como en las vistas también está disponible la inyección de dependencias, podríamos incluso llevar allí el acceso a settings de la aplicación, de forma bastante limpia:

Acceso a settings desde vistas

¡Eso es todo! Espero que os sea de utilidad para seguir conociendo los cambios que se nos vienen encima, esta vez relativos a la forma de acceder a los parámetros de configuración de nuestras aplicaciones :)

Y ah, que ya se me olvidaba: recordad que ASP.NET Core está aún en el horno, y parte de lo dicho en este post podría aún cambiar conforme avance su desarrollo.

Publicado en Variable not found.

2 Comentarios:

David dijo...

Otro post claro, sencillo, bonito y muy útil para acceder a nuestros Settings. Se agradece el tiempo dedicado al blog con tan valiosa información!!!

José María Aguilar dijo...

Muchas gracias, David! :-)