lunes, 3 de abril de 2017
.NET/.NET Core
- The week in .NET – On .NET with Sidharth Gupta on Tizen, Happy birthday .NET with Bertrand Le Roy, JSON.NET 10, Gunnar Peipman
Bertrand Le Roy - Linq performance improvements in .NET Core
Thomas Levesque - Deconstructors for non-tuple types in C# 7.0
Andrew Lock - Externalizing the HttpClient internals for fun & profit
Ayende Rahien - Open sourcing the MSTest Test Framework
Brian Harry - Modeling Battleship in C# - Introduction and Strategies & Components and Setup
Matthew P. Jones - Validate your AutoMapper mappings
Christiaan van Bergen
Publicado por José M. Aguilar a las 8:55 a. m.
Nadie ha comentado la entrada, ¿quieres ser el primero?
Etiquetas: enlaces
miércoles, 29 de marzo de 2017
Imagen original de Pixabay.
La historia consiste en abusar del amplio conjunto de caracteres soportado por UTF, sustituyendo el punto y coma de finalización de una línea de código (";") por el símbolo de interrogación griego (";", Unicode 037E), indistinguibles a simple vista, como en la siguiente línea:
public void HelloWorld() { Console.WriteLine("Hello world!"); }
lunes, 27 de marzo de 2017
.NET/.NET Core
- Using Domain Events within a .NET Core Microservice
Cesar de la Torre [MSFT] - Report from the battlefield #10 - fuck-up with AutoMapper
Michał Komorowski - The week in .NET – Happy birthday .NET with Mads Torgersen, Coypu
Bertrand Le Roy - C# 7.0: Out variables
Gunnar Peipman - DotNet Core Version Confusion
Julie Lerman - Working with dependencies in dotnet core
Anuraj P. - C# 7: Ref Returns, Ref Locals, and how to use them
Daniel Cabtree - MassTransit on RabbitMQ in ASP.NET Core
Simon Timms - A Hitchhikers Guide to the CoreCLR Source Code
Matt Warren - C# 7.0 - Tuples To The Extreme!
Rion Williams - C# value type boxing under the hood
Yi Zhang - C# 7: Dynamic types and Reflection cannot access Tuple fields by name
Daniel Cabtree - .NET Core 1.1 – How to publish a self-contained application
Luis Henrique Demetrio - Cómo localizar aplicaciones con C# y .NET
Jorge Durán
martes, 21 de marzo de 2017
Por ejemplo, en la ejecución del siguiente código Razor, el usuario que solicitó la página no vería absolutamente nada durante 10 segundos, y de pronto le llegaría el resultado completo:
@using System.Threading.Tasks @{ Layout = null; } <html> <head> <title>Hello world!</title> </head> <body> <h1>Let's go</> <ul> @for (int i = 0; i < 10; i++) { await Task.Delay(1000); <li>@i</li> } </ul> </body> </html>Nota: Observad que para hacer el retardo, en lugar del típico Thread.Sleep() he utilizado
Task.Delay()
sólo para recordaros que en ASP.NET Core las vistas se renderizan/ejecutan en un contexto asíncrono y, por tanto, podemos utilizar en su interior llamadas con await
como hacemos en otros puntos del código.
lunes, 20 de marzo de 2017
.NET/.NET Core
- The week in .NET – On .NET with Scott Hunter, On .NET with Matt Watson, MessagePack
Bertrand Le Roy - C# 7: Local Functions are Funcs too
Daniel Crabtree - Async Tip: why you should avoid void
Bnaya Eshet - Why to build your own CSV parser (or maybe not)
Tomas Takac - What is the NETStandard.Library metapackage?
Andrew Lock - Threading - Under the Hood
Marco-Hans Van Der Willik - Domain Events with Convention-Based Registration and Deferred Execution Support
Arthur Minduca - NET Framework - Immutable Collections
Hadi Brais - C# Local Functions
David Hayden - C# 7: Dissecting Local Functions to understand how they capture local variables
Daniel Crabtree - An alternative to ConfigureAwait(false) everywhere
Ben Williams - Turning off Telemetry Data in .NET Core
Michael Crump - Getting Started with Async / Await
Jon Goldberger - Dragging and Dropping Images and Files into the Web Browser Control
Rick Strahl
martes, 14 de marzo de 2017
Probablemente sabréis (y si no, podéis echar un vistazo a este post) que existen diversas fórmulas para añadir servicios o componentes al contenedor de dependencias, y una de ellas es la denominada "Scoped". Estos componentes quedan registrados asociados a un ciclo de vida específico (
ServiceLifetime.Scoped
), que indica que cada vez que haya que se solicite un objeto de este tipo se retornará la misma instancia dentro el ámbito actual, que normalmente coincide con el proceso de una petición específica. O en otras palabras, dentro de la misma petición, la instancia del componente será compartida por todos los objetos que dependan de él. Además, al finalizar el proceso de la petición, el framework invocará su método
Dispose()
(si existe, claro), permitiendo liberar los recursos que haya utilizado. Por ejemplo, suele ser una buena práctica emplear esta técnica para reutilizar un contexto de datos entre los servicios que participan en el proceso de una petición que accede a una base de datos, y asegurar su liberación final para no dejar conexiones abiertas.Pero este post no va de ver cómo registrar estos componentes o de cómo utilizarlos en nuestras aplicaciones, sino de responder una simple curiosidad: ¿quién se encarga de crear este scope cuando comienza una petición y de liberarlo cuando finaliza? Ya, sé que no tiene mucha utilidad práctica en el día a día, pero es una buena excusa para echar un vistazo y entender cómo funcionan las cosas por dentro ;)
<Disclaimer>Todo lo que comentaremos a continuación son detalles de la implementación actual del framework y son válidos en la versión 1.1 de ASP.NET Core, pero podrían cambiar en futuras versiones.</Disclaimer>