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 5 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: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 5 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.
from Variable not found http://www.variablenotfound.com/2015/06/acceso-tipado-settings-en-aspnet-5.html
via IFTTT