
Si lleváis algunos años en esto, seguro recordaréis que en ASP.NET "clásico", los settings de las aplicaciones eran valores inmutables. Se guardaban habitualmente en el célebre archivo Web.config
, y cualquier cambio a este archivo implicaba reiniciar la aplicación para que los cambios tuvieran efecto.
En ASP.NET Core, los settings son mucho más flexibles: se pueden cargar desde diferentes orígenes, pueden almacenarse en distintos formatos, y es posible modificarlos en caliente sin necesidad de reiniciar la aplicación. Pero además, ofrecen otra capacidad que es interesante conocer: podemos detectar y reaccionar a cambios en los settings en tiempo real, es decir, en el mismo momento en que se producen.
Para ello, básicamente tendremos que bindear una clase personalizada a la sección de settings que nos interese, y luego utilizar la interfaz IOptionsMonitor
, para registrar un manejador personalizado que se ejecute cada vez que se produzca un cambio en los valores de configuración que estamos monitorizando.
En este post vamos a ver cómo hacerlo, paso a paso.
Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: .net, aspnetcore, trucos

Un lunes más, ya tenemos aquí la colección de enlaces a contenidos interesantes recopilados durante la semana pasada. Como de costumbre, encontramos lecturas sobre .NET, ASP.NET Core, Blazor, IA, datos, frontend, JavaScript, TypeScript, MAUI y otros temas que espero os aporten algo 🙂
En esta ocasión, me gustaría destacar algunos de los artículos de la semana que más me han llamado la atención.
Primero, una nueva demostración de la velocidad brutal con la que se van produciendo avances tecnológicos de escala: la presentación por parte de Microsoft de Majorana 1, el nuevo chip que, según anuncian, adelantará el uso real de computación cuántica a unos años, en lugar de las décadas que estaban previstas.
También me ha resultado interesante el post sobre cómo SoundCloud evolucionó su su arquitectura utilizando BFF, microservicios y DDD. Estos contenidos basados en experiencias reales suelen ser bastante inspiradores.
Toda seguridad es poca, por lo que siempre es recomendable volver a echar un vistazo a las guías OWASP sobre cómo asegurar nuestras aplicaciones web full-stack.
Por último, es impresionante leer las mejoras que se van introduciendo en Visual Studio, especialmente las que hacen que el IDE sea cada vez más inteligente y, por tanto, nosotros seamos cada vez más productivos. En esta entrega, encontramos el soporte para tool calling en Copilot, y la información sobre el código usado como referencia para los autocompletados.
El resto, a continuación...
Por si te lo perdiste...
- Cambiar el nombre de la carpeta raíz de las páginas en Razor Pages
José M. Aguilar - Adivina, adivinanza: ¿por qué no compila este código?
José M. Aguilar
.NET
- IEnumerable vs IEnumerator in C#: One is 2x Faster
Steven Giesel - Understanding Garbage Collection - How the dotnet Garbage Collector Works
Darren Horrocks - The Curious Case of .NET ConcurrentDictionary and Closures
Khalid Abuhakmeh - How to Convert Word to PDF in C# with Advanced Formatting Options
Mohanaselvam Jothi - Leveraging Tuples in C#: Real-World Use Cases
Ali Hamza Ansari - Writing a .NET Garbage Collector in C#
Kevin Gosse - Killing a Worker Application from a BackgroundService
Bryan Hogan - Microsoft .NET Code Analysis: Optimizing Byte-to-Hex Conversions
David McCarter - Retrieving Images from the Clipboard Reliably in WPF Revisited
Rick Strahl

Imaginad que tenemos un objeto clase Coche
y otro del tipo PatitoDeGoma
, sin ningún tipo de relación entre ellos. C# no permite hacer un cast y convertir libremente de uno a otro tipo o viceversa, ¿verdad?
Pues eso pensaba yo también, hasta que hace poco descubrí una característica de .NET que no he usado nunca y dudo que vaya a usar 😝, pero me ha parecido de lo más curiosa y quería compartirla con vosotros. Como podréis comprobar, es una buena candidata para la serie C# bizarro, de la que ya llevamos varias entregas, aunque en realidad se trata de una característica de la plataforma y no del lenguaje.
La protagonista es la clase estática System.Runtime.CompilerServices.Unsafe
, que, según indican en la documentación oficial, implementa funcionalidades de bajo nivel para manipular punteros gestionados y no gestionados. Su objetivo, según esta misma fuente, es permitir a desarrolladores de bibliotecas escribir código de alto rendimiento evitando los chequeos de seguridad de .NET.
Esta clase proporciona métodos de aritmética de punteros, conversión de tipos y otras operaciones que no son seguras en C# y que, por tanto, no se permiten salvo en contextos unsafe
. Sin embargo, en ocasiones, puede ser útil para realizar operaciones que no son seguras pero que sabemos que no van a causar problemas en tiempo de ejecución.
El que más me ha llamado la atención ha sido el método As()
, que permite forzar un cast entre dos tipos que a priori no son compatibles sin realizar comprobaciones de tipo en tiempo de ejecución.

Aquí tenemos la colección semanal de enlaces a contenidos interesantes relacionados con el desarrollo de software con C#, ASPNET, Blazor, JavaScript, CSS, Azure, AI, .NET MAUI, Visual Studio y otros.
Por destacar, esta semana encontramos un interesante post de Ricardo Peres donde nos cuenta qué eso de OpenTelemetry, cómo enviar datos de telemetría desde aplicaciones ASP.NET Core, y cómo recopilarlos y consultarlos usando herramientas como Grafana, Loki, Tempo y Prometheus a través de una imagen de Docker. Imperdible.
También me ha parecido curioso Gandalf, el juego al que llego a través del post de Bart Wullems, que nos permite comprobar nuestras habilidades para manipular un LLM usando inyección de prompts. Sin duda, da para un buen rato de maldad y diversión 😉
El resto, a continuación. ¡Espero que os resulten interesantes!
Por si te lo perdiste...
- ¿Acceder a miembros privados de una clase C# sin usar reflection? ¡En .NET 8 es posible!
José M. Aguilar - Flushing asíncrono en ASP.NET Core MVC
José M. Aguilar
.NET
- Microsoft.Testing.Platform: Now Supported by All Major .NET Test Frameworks
Amaury Levé - Using .NET on Linux
Bryan Hogan - Unlocking delegate's potential in C#
Ali Hamza Ansari - Writing a .NET Garbage Collector in C#, part 3
Kevin Gosse - Why Large JSON Objects Are Slowing Down Your .NET Application (And How to Fix It)
Hossein Kohzadi - C# Dictionary: How to Create One and Best Practices
Stackify Team - Exploring the .NET Ecosystem: A Visual Mind Map
Abhijit Jana

Desde que se introdujo en Visual Studio el soporte para archivos .http
, he estado usando esta funcionalidad del IDE para probar APIs, dejando casi totalmente de lado a herramientas que había utilizado siempre como Postman o Fiddler. Es genial tenerlo todo en el mismo entorno, que sea tan sencillo de utilizar, y que se integre tan bien con otras herramientas del ecosistema, como el endpoint explorer, user secrets de ASP.NET Core, Azure key vault, etc.
Sin embargo, una limitación importante era que sólo podíamos declarar y asignar variables, pero éstas no podían ser modificadas en tiempo de ejecución. Esto hacía que, por ejemplo, no pudiéramos hacer una llamada a un endpoint de autenticación y utilizar luego el token retornado para acceder a determinados recursos, por lo que teníamos que hacerlo manualmente.
Pero esto cambió con la versión 17.12 de Visual Studio 2022, donde se ha añadido la posibilidad de poder capturar valores de la respuesta de una petición para utilizarlos más adelante en otras peticiones.

Ya está disponible la entrega semanal número 596 de la serie, donde, como de costumbre, podéis encontrar decenas de links a contenidos que he ido recopilando durante la semana y considero interesantes sobre .NET, ASP.NET Core, Blazor, acceso a datos, inteligencia artificial, programación en frontend, herramientas y otros temas.
En esta ocasión, lo que me más ha llamado la atención es la retirada de Azure Data Studio. Ahora que estaba empezando a tenerle cariño a esta herramienta para gestionar mis bases de datos SQL Server, resulta que la van a discontinuar en favor de la extensión MSSQL extension de Visual Studio Code.
¿Sabíais que la media de tiempo que se tarda en volver a concentrarse en una tarea después de una interrupción es de 23 minutos? Muy interesante el artículo de Milan Milanović sobre cómo los cambios de contexto, o context switching, afectan a la productividad de los desarrolladores. Aunque cualquiera que se dedique al desarrollo ya lo ha sentido en sus carnes, es interesante leer un análisis más profundo sobre el tema.
Vale la pena echar también el vistazo a las reflexiones de Tim O'Reilly sobre cómo afectará la irrupción de la IA en el trabajo de los desarrolladores. ¿Iremos todos a la calle? ¿O, por el contrario, se abrirán nuevas oportunidades? Spoiler: la clave es adaptarse.
El resto de enlaces, a continuación...
Por si te lo perdiste...
- TimeProvider: el proveedor de tiempos de .NET 8
José M. Aguilar - Acceder a IIS Express desde otro equipo de la red local
José M. Aguilar
.NET
- Why Tracebit is written in C#
Sam Cox - Modelling data relationships with C# types
Mark Seemann - Timers, Finalizers and Memory Leaks
Sergey Teplyakov - Supporting multiple .NET SDK versions in a source generator
Andrew Lock - Vogen and Value Objects with C# and .NET
Khalid Abuhakmeh - Writing a .NET Garbage Collector in C#
Kevin Gosse - Migrate from MSTest to xUnit using a Roslyn analyzer
Gérald Barré - Numeric sorting in .NET
Anthony Simmon - How to Protect Word Documents in C#: Step-by-Step Guide
Mohanaselvam Jothi - .NET 9 Networking Improvements
Máňa & Natalia Kondratyeva & Anton Firszov - LINQ MindMap: .NET 10 Edition
Steven Giesel