Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Cómo saber si un tipo está registrado en el proveedor de servicios de .NET 6, pero sin necesidad de resolverlo
José María Aguilar - Etiquetado de consultas en Entity Framework Core
José María Aguilar
.NET Core / .NET
- De runas y grafemas en Unicode y NET6
Eduard Tomás - Celebrate the .NET 20th Anniversary with the Community!
James Montemagno - Dynamic Language Runtime in C#/.NET
Uladzislau Baryshchyk - Using Generated Methods Instead of Reflection
Ricardo Peres - A type-safe DI Container C# example
Mark Seemann - .NET Framework vs .NET Core (.NET 5+)
Sanjay M. - Parallelize test cases execution in xUnit
Gérald Barré - Linq improvements in .NET 6
Bruno Sonnino - Databinding with the OOP Windows Forms Designer
Klaus Loeffelmann - Solving the source generator 'marker attribute' problem - Part 2: Creating a source generator
Andrew Lock - Static Abstract Members In C# 10 Interfaces
Khalid Abuhakmeh - How to Create PDF file in C# .NET – 5 Easy Steps
Sanjay M. - Hello OmniSharp on .NET 6.0!
Filip Woj - World’s smallest C# program (featuring cheating)
Jiří Činčura - Improve Code Quality with BannedSymbolAnalyzers
Max Hamulyák - Automate your .NET project builds with NUKE a cross-platform build automation solution
Laurent Kempé - Pure magic in C# using tuples and relational patterns
Jiří Činčura - 3 Ways To Increase App Reliability With Polly
Stuart Blackler - .NET Basics: DTO (Data Transfer Object)
Assis Zang - This is how Variadic Arguments could work in C#
WhiteBlackGoose - What’s up with TimeZoneInfo on .NET 6? (Part 1)
Jon Skeet
Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: enlaces
Si habéis utilizado isolation con módulos JavaScript en Blazor 5, probablemente lo que vamos a ver en este post os resulte muy interesante para organizar los archivos JavaScript de la aplicación, especialmente aquellos que sean utilizados desde un único componente.
Como recordaréis, el aislamiento de JavaScript de Blazor permitía cargar de forma dinámica un archivo .js
y ejecutar código definido en él. Por ejemplo, imaginad un módulo como el siguiente, definido en wwwroot/modules/MyPrompt.js
:
export function showPrompt(message, defaultValue) {
return prompt(message, defaultValue);
}
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Declaración de espacios de nombre en una línea con file-scoped namespaces de C#10
José María Aguilar - Índices y rangos en C# 8 (2 de 2)
José María Aguilar
.NET Core / .NET
- Announcing .NET Community Toolkit v8.0.0 Preview 1
Sergio Pedri - C# 10 (Two Decades of C#: A Reference) • Ben Bowen's Blog
Ben Bowen - Dependency Injection in .NET 6
Matthew Jones - Awaiting an async void method in .NET
Gérald Barré - Simple WebSocket client and server application using .NET
Jiří Činčura - Top-Level Statements in C#
Marinko Spasojevic - Bulk download from Azure Blob Storage with C#
Thomas Ardal - Using Guard Clauses in .NET
Charlin Agramonte - Solving the source generator 'marker attribute' problem - Part 1: Creating a source generator
Andrew Lock - Colors in .NET: An In-Depth Guide
Peter Huber - Difference Between int.Parse() and Convert.ToInt32() in C#
Marinko Spasojevic - Raising Coding Standards with .NET 6.0 Code Analyzers
Ian Griffiths - Switch Expression with Multiple Cases That Return the Same Result in C#
Marinko Spasojevic - Using OAuth 2.0 with LINQ to Twitter
Joe Mayo - Everything You Want to Know About the Record Type in .NET: Performance
David McCarter - De-mystifying Linq
Steve Fenton - How to collect return values from Parallel.ForEach?
Patrick Smacchia - How to Create a PNG File from a Web Page in C#
Roland Weigelt - Validating Objects With FluentValidation
Assis Zang - 6 .NET Myths Dispelled-Celebrating 21 Years of .NET
Charles Chen - How to Use Serilog in ASP.NET Core Web API
Claudio Bernasconi - .NET 6 Register Services using Reflection
Tom Fletcher
El middleware de gestión de errores DeveloperExceptionPageMiddleware
ha estado con nosotros desde la llegada de .NET Core, allá por 2016, ayudándonos a mostrar información detallada de las excepciones producidas en tiempo de ejecución mientras estábamos desarrollando. De hecho, era frecuente encontrar un código como el siguiente en las clases Startup
de las aplicaciones ASP.NET Core, pues se incluía por defecto en todas las plantillas de proyecto de este tipo:
...
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
... // Otros middlewares
}
El extensor UseDeveloperExceptionPage()
era el encargado de añadir el middleware DeveloperExceptionPageMiddleware
al pipeline, de forma que éste podía capturar las excepciones y mostrar una página amigable y con información útil para los desarrolladores.
Sin embargo, si echamos un vistazo al código de configuración del pipeline en los proyectos ASP.NET Core 6 (que, por cierto, sabréis que ya no se encuentra en Startup.cs
sino en Program.cs
), vemos que ya no aparece ninguna referencia a este middleware. ¿Qué ha pasado? ¿Qué has hecho con nuestro DeveloperExceptionPage
, ASP.NET Core 6?
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Curiosidad: ¿Por qué el encabezado 'referer' se llama así, y cómo nos afecta a los desarrolladores .NET?
José María Aguilar - Índices y rangos en C# 8 (1 de 2)
José María Aguilar
.NET Core / .NET
- Saving source generator output in source control: Creating a source generator
Andrew Lock - Get C# Metadata From a Call Site
Khalid Abuhakmeh - C# and C++ type aliases and their consequences
Raymond Chen - ILogger, ILoggerFactory, and ILoggerProvider in .NET
Marinko Spasojevic - Dependency Injection in .NET 6 - Adding and Injecting Dependencies
Matthew Jones - Serializing Objects to XML in C#
Marinko Spasojevic - 5 Features in C# 10 Every Developer Should Know
Selva Kumar Ramarasu - Bending .NET - Corrected Common Flat Build Output
Niels Rasmussen - Wait conditions in Selenium with C#
James Croft - Why Use DateTimeOffset
Steve Smith - Protobuf In C# .NET – Part 4 – Performance Comparisons
Wade Gausden - Optimizing CPU-Bound and Memory-Bound .NET Applications: 11 Best Practices
Michael Shpilt - Convert DateTime to ISO 8601 String in C#
Marinko Spasojevic - How to send recurring emails in C# .NET using SendGrid and Quartz.NET
Niels Swimberghe - Bending DateTime in .NET to Test Your Code Better
Stephen Walsh - New Task.WaitAsync method in .NET 6
Jiří Činčura
Versiones de .NET anteriores a la 6 no disponían de una fórmula específica para determinar si un tipo o interfaz está registrado como servicio en el sistema de inyección de dependencias.
La única forma de hacerlo era intentar resolverlo, usando métodos como GetService()
o GetService<T>()
, y comprobar si el resultado era null
:
var myService = serviceProvider.GetService<IMyService>();
if(myService is null)
{
// El servicio no está registrado, hacemos algo
}
¿Cuál es el inconveniente de esto? Si el servicio no está registrado, ninguno: la llamada retornará un nulo y listo.
El problema viene cuando sí está registrado, pues estaremos forzando la resolución de un servicio que, en realidad, no necesitamos para nada, pues sólo nos interesaba saber si existía o no. Porque recordemos que la resolución de un servicio podría tener un coste importante en términos de rendimiento, memoria, o incluso efectos colaterales en el estado de la aplicación, especialmente si nuestro servicio depende de otros, que a su vez dependen de otros, etc.