La entrega semanal de los enlaces interesantes ya está disponible, con cerca de cincuenta referencias a contenidos a los que creo que merece la pena echar un vistazo.
Y por destacar, en primer lugar, la interesante reflexión de Braulio Díez sobre las nuevas posibilidades y peligros que ofrece la IA generativa en el ámbito de la programación, y algunas predicciones sobre lo que veremos en 2026 a este respecto.
La invalidación de una caché distribuida es un problema complejo. Milan Jovanović nos explica cómo solucionarlo usando Redis e HybridCache.
Davide Bellone abre un interesante debate sobre la necesidad (o no) de usar el sufijo Async en los métodos asíncronos de C#. Yo soy de Async, ¿y tú?
También vale mucho la pena dedicar un ratillo a leer el informe de Cloudflare 2025 Year in Review, donde, desde su privilegiada posición, analizan lo que ven pasar por sus redes. Spoiler: mucho tráfico, mucha IA, mucho ataque DDoS, incremento de uso de encriptación post-cuántica, etc.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Mejora el rendimiento de HybridCache mediante la reutilización de objetos
José M. Aguilar - El hosting in-process de ASP.NET Core
José M. Aguilar
.NET
- .NET 10: Zip and GZip API Improvements
Anthony Giretti - Solving the Distributed Cache Invalidation Problem with Redis and HybridCache
Milan Jovanović - .NET 10: Post-Quantum Cryptography Comes to .NET
Anthony Giretti - .NET 10 and C# 14 — Unbound generic types and nameof
Henrique Siebert Domareski - Making foreach on an IEnumerable allocation-free using reflection and dynamic methods
Andrew Lock - 10 Reasons to Upgrade to .NET 10
Anton Martyniuk - Code opinion: why I prefer avoiding the Async suffix in C# asynchronous methods
Davide Bellone - New in .NET 10 and C# 14: Fast Model Validation for APIs
Ali Hamza Ansari - Why ISO Standards Actually Matter for .NET Developers
Martin Stühmer
Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: enlaces
Normalmente, cuando registramos un servicio en el inyector de dependencias de .NET, lo hacemos una única vez. A veces registramos directamente el servicio, aunque lo habitual es que lo asociemos a una interfaz, de forma que en futuro podamos sustituir la implementación sin tener que cambiar el resto del código:
// Registramos el servicio asociado a una interfaz:
builder.Services.AddScoped<IInvoiceIssuer, InvoiceServices>();
Sin embargo, nada impide que el mismo servicio lo registremos varias veces asociándolo a distintas abstracciones, sobre todo si tenemos nuestras clases de servicio son muy extensas y estamos haciendo segregación de interfaces (la "I" de los principios SOLID):
// Registramos el servicio asociado a varias interfaces, de forma
// que en otros servicios sólo será necesario inyectar la interfaz
// concreta que necesitemos:
builder.Services.AddScoped<IInvoiceIssuer, InvoiceServices>();
builder.Services.AddScoped<IInvoiceSender, InvoiceServices>();
builder.Services.AddScoped<IInvoicePrinter, InvoiceServices>();
...
Pero fijaos que esto está introduciendo un sutil problema: cada vez que se inyecte una de estas interfaces, se creará una nueva instancia de InvoiceServices, lo cual, además de consumir más recursos, puede ser un problema si a su vez el servicio depende de otros componentes que no puedan o deban ser compartidos:
public class DoSomething
{
public DoSomething(IInvoiceIssuer issuer, IInvoiceSender sender, IInvoicePrinter printer)
{
// Aquí se habrán creado tres instancias de InvoiceServices
}
}
¿Cómo podemos solucionarlo?
Ya tenemos lista la recopilación de enlaces a contenidos que he ido descubriendo a lo largo de la semana pasada. Como siempre, mucha información interesante para seguir aprendiendo y estar al día.
Merece la pena destacar el post de José Manuel Alarcón descubriéndonos por qué muchos desarrolladores usamos el punto y coma, y dónde está su origen.
Muy interesante y curioso el artículo interactivo de Alex Harri sobre la representación de imágenes usando caracteres ASCII, el ASCII-art de toda la vida.
Y me ha llamado la atención el vigésimo aniversario de jQuery, todo un clásico que, aunque ha dejado de ser la opción por defecto para muchos, sigue siendo la biblioteca más usada de la web, y continúa su evolución presentando la versión 4.0.0.
En resto de contenidos, a continuación.
Por si te lo perdiste...
- ¿Se pueden introducir directivas o lógica de inicialización en todas las vistas y páginas sin duplicar código?
José M. Aguilar - Task.WhenEach() en .NET 9: Procesa tareas conforme se van completando
José M. Aguilar
.NET
- Recent updates to NetEscapades.EnumGenerators: new APIs and System.Memory support
Andrew Lock - Mastering Memory Management and Garbage Collection in .NET
Nemorize - Add Headers, Footers, and Page Numbers to PDFs in C#
Chinnu Muniyappan - Generate an Open Graph Profile Image with C#
Joseph Guadagno - Collection Expression Arguments in C# 15+
Steven Giesel - Explaining Contract Tracked Changes Automatically Using .NET C# and AI
Bjoern Meyer - Announcing DotnetPsCmds - PowerShell CmdLets for .NET
Peter Ritchie - Compile Time Checking of String Parameters in C#
Kevin Logan - Deep C# - The Console
Mike James - New in .NET 10 and C# 14: Enhancements in APIs Request/Response Pipeline
Ali Hamza Ansari - Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier (Part 1)
Steve Gordon
Desde hace ya casi veinte años, reservo el primer post de enero para compartir con vosotros los contenidos más leídos del año anterior, sobre todo para asegurarme de que no os habéis perdido ninguno de ellos 😊
Así que, como no podía ser de otra forma, aquí tenéis los top posts de 2025, una lista prácticamente copada por artículos relacionados con .NET y C#, especialmente en sus últimas versiones, que han sido los grandes protagonistas del año en el blog.
Mucho contenido interesante en la última recopilación del año 🙂
Me ha alegrado verde nuevo a Juan María Hernández que, tras algunos años de parón, vuelve con una reflexión bastante certera sobre por qué el proceso de desarrollo es cada vez más lento y costoso conforme los productos van creciendo en complejidad. Os recomiendo su lectura.
También me ha parecido interesante el artículo de Alexey Fedorov sobre el devastador efecto de una estampida en la caché de nuestras aplicaciones, junto con algunas estrategias para evitarlo.
El proyecto MinimalWorker, de Joshua Jesper Krægpøth Ryder, puede resultar útil para reducir significativamente el boilerplate necesario para registrar workers en aplicaciones ASP.NET Core y .NET.
Vladan Petrovic nos muestra TUnit, un nuevo framework de testing para .NET que promete ser una alternativa interesante a los ya existentes.
Y, como siempre, vale la pena leer a Derek Comartin, esta vez reflexionando sobre por qué los debates sobre si debemos usar o no microservicios suelen perder el foco del verdadero problema que se intenta resolver: el acoplamiento.
Por último, como este será el último recopilatorio hasta la vuelta de las fiestas navideñas, aprovecho para desearos a todos unas felices fiestas y un próspero año nuevo 2026.
Por si te lo perdiste...
- Otras formas de obtener dependencias en controladores ASP.NET Core MVC
José M. Aguilar - Propiedades parciales en C# 13 y .NET 9
José M. Aguilar
.NET
- Custom Scripting for Web Applications
Nevio Medancic, Enzo Grubisa & Vassili Kaplan - Dynamically Changing Decimal & Thousand Separators At Runtime
Conrad Akunga - TUnit: The New Sheriff in Town for .NET Testing
Vladan Petrovic - Refactoring Legacy C# Codebases: Modernizing Async, Collections, and Architecture for Safe, Maintainable .NET
Sudhir Mangla - C# Tip How to create and access custom C# Attributes by using Reflection
Davide Bellone - Creating a .NET CLR profiler using C# and NativeAOT with Silhouette
Andrew Lock - .NET Job Scheduling — Choosing the Right Framework
Martin Stühmer - New in .NET 10 and C# 14: Optimizations in log aggregation jobs
Ali Hamza Ansari - Angular Signals, But Better Now for .NET
I Looked Inside .git and You Won't Believe What I Found - How to Analyse Large CSV Files with Local LLMs in C# (English)
Scott Galloway - Stop Typing: The .NET CLI Tab Completion You've Been Missing
Martin Stühmer - Flatten your models with Facet .NET
Tim Maes - Fetching and Analysing Web Content with LLMs in C#
Scott Galloway - Streams Record Truth. Queues Do Work: A .NET Way To Keep Them Straight
Christopher Johnson - Your cache is not protected from cache stampede
Alexey Fedorov - The New Features and Enhancements in .NET 10
Joydip Kanjilal
La relación de muchos desarrolladores con las expresiones regulares es de amor-odio. Aunque indudablemente son una herramienta muy potente, su uso puede ser complicado y a menudo se convierten en un dolor de cabeza.
Pero hoy no vamos a hablar de su (oscura) sintaxis, ni de lo difícil que es depurarlas, ni de cómo utilizarlas en .NET, sino de distintas técnicas que pueden ayudarnos a disparar su velocidad de proceso, algo bastante importante si las utilizamos en los procesos críticos o hot paths de nuestra aplicación.
En este artículo vamos comparar el rendimiento de distintos escenarios de uso de expresiones regulares, y cómo podemos optimizar su uso en .NET.

