Cambiar en caliente la configuración fuertemente tipada en ASP.NET Core 2.0 (I)
Cuando estamos trabajando con aplicaciones que utilizan valores configurados en archivos de configuración (appsettings.json), o en el caso concreto del ejemplo y demostración de uso de configuración fuertemente tipada en ASP.NET Core 2 que vimos en otra entrada, nos surge normalmente una necesidad.
¿Qué ocurre cuando cambiamos algo en el archivo appsettings.json y nuestra aplicación está ejecutándose?.
Para ello, recordemos primero como lo hacíamos en el ejemplo de la entrada de mi blog que indicaba antes.
El código del controlador que usa la configuración personalizada, queda de la siguiente forma:
private readonly ContactSettings _contactSettings; public HomeController(IOptions<ContactSettings> contactSettings) { _contactSettings = contactSettings.Value; }
Este código utiliza IOptions.
IOptions es una interfaz que nos dará la posibilidad de acceder a la configuración.
Podrás encontrar más información sobre IOptions en este enlace.
A partir de ASP.NET Core 1.1, podemos utilizar en lugar de IOptions, IOptionsSnapshot.
Con esta interfaz, podremos recargar los datos e información de configuración cuando el fichero de configuración cambia.
Parece por lo tanto lógico, que utilicemos IOptionsSnapshot en el constructor de nuestro controlador en el caso de que queramos cargar la configuración cuando esta cambia.
Podrás encontrar más información sobre IOptionsSnapshot en este enlace.
Por lo tanto, el código de nuestro controlador, quedará de la forma:
private readonly ContactSettings _contactSettings; public HomeController(IOptionsSnapshot<ContactSettings> contactSettings) { _contactSettings = contactSettings.Value; }
Ahora, si ejecutamos nuestra aplicación y en tiempo de ejecución modificamos el archivo appsettings.json, cuando accedamos nuevamente al controlador, éste cargará nuevamente la configuración teniendo en cuenta los cambios realizados.
Con esto, cumpliremos la máxima de cambiar en caliente la configuración agregada en appsettings.json.
Sin embargo, existe una problemática a la hora de aplicar configuración personalizada en más de un archivo JSON y configurarla previamente en Startup. Se trata de un caso particular pero con el que deberemos lidiar seguramente en alguna ocasión.
Esto es lo que veremos en una próxima entrada.
¡Happy Coding!