martes, 9 de junio de 2015
La 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:
Por supuesto, el nombre de la clase puede ser el que más nos guste, en el ejemplo usamos
A continuación, en el método
Actualizado 1/09/2015: en beta7,
Pero en realidad esto no registra realmente la clase
Así, podríamos obtener un objeto
O bien utilizar inyección de propiedades, también nivel de clase controladora:
Incluso inyección de parámetros en acciones, por si sólo necesitamos acceder a la instancia de
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:
¡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.
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:
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:
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:O bien utilizar inyección de propiedades, también nivel de clase controladora:
Incluso inyección de parámetros en acciones, por si sólo necesitamos acceder a la instancia de
AppSettings
desde una acción concreta: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:
¡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:
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!!!
Muchas gracias, David! :-)
Enviar un nuevo comentario