lunes, 12 de noviembre de 2018
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- El gran consejo para crear código mantenible
José María Aguilar - Probar scripts en producción sin desplegar nada, y otros usos interesantes de Fiddler
José María Aguilar
.NET / .NET Core
- Announcing .NET Standard 2.1
Immo Landwerth - Announcing ML.NET 0.7 (Machine Learning .NET)
César de la Torre - Understanding the Whys, Whats, and Whens of ValueTask
Stephen Toub - Rompiendo los limites: Mocking en las Pruebas Unitarias .Net
Jorge Turrado -
Move your first steps with .NET Core 3.0 for desktop development
Matteo Pagani - Smart enums / Type-safe enums in .NET
Gérald Barré - Exploiting multiplication by zero optimization (and failing), yet learning about equals to zero shortcut (Roslyn)
Jiří Činčura - Code Coverage is Finally Easy in .Net Core
Lee Richardson - dotnet-script 0.27.0 is out – with a ton of features!
Filip Woj - Creating a .NET Global Tool from an existing Console Application
Rick Strahl - An Early Exploration of Blazor
Dane Vinson - Creating your own (simple) dependency injection framework: Service Locator
Jonathan Donaldson
Publicado por José M. Aguilar a las 9:05 a. m.
Nadie ha comentado la entrada, ¿quieres ser el primero?
Etiquetas: enlaces
martes, 6 de noviembre de 2018
En el framework ASP.NET Core MVC es muy sencillo establecer los mensajes de error de validación de campos utilizando propiedades de las data annotations, como en el siguiente ejemplo:
namespace LocalizationDemo.ViewModels
{
public class PersonViewModel
{
[Required(ErrorMessage ="The name is required")]
public string Name { get; set; }
}
}
Incluso es bastante fácil hacer que este texto aparezca traducido atendiendo a la cultura del hilo actual. Para ello, simplemente debemos configurar los servicios de localización apropiadamente, e indicar en la propiedad ErrorMessage
la clave del mensaje de error en el archivo RESX asociado a la clase:// En Startup.cs:
public void ConfigureServices()
{
...
services.AddLocalization(opt=>opt.ResourcesPath="Resources");
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddViewLocalization()
.AddDataAnnotationsLocalization(); // Esta línea añade la localización
// de data annotations
}
// En el view model:
namespace LocalizationDemo.ViewModels
{
public class PersonViewModel
{
// El mensaje de error está definido
// en Resources/ViewModels.PersonViewModel.resx
[Required(ErrorMessage ="NameIsRequired")]
public string Name { get; set; }
}
}
Esto es así de fácil para las validaciones que declaramos de forma explícita en nuestro código, mediante atributos de anotaciones de datos. Sin embargo, existen otro tipo de validaciones que se realizan de forma implícita (por ejemplo, cuando en un campo entero introducimos un valor no numérico) y cuyos mensajes de error no son tan sencillos de establecer.Publicado por José M. Aguilar a las 9:15 a. m.
Etiquetas: aspnetcore, aspnetcoremvc, localizacion, trucos
lunes, 5 de noviembre de 2018
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- ¿Sabes 1337?
José María Aguilar - Personalizar las plantillas de controladores y vistas para ASP.NET Core MVC
José María Aguilar
.NET / .NET Core
- .NET Core Opinion - Be Wary of GUI Build Tools
K. Scott Allen - The future of JSON in .NET Core 3.0
Immo Landwerth - Announcing .NET Framework 4.8 Early Access build 3673
Namrata Karnam - C# Intermediate - Delegates in C# (Func, Action)
Marinko Spasojevic - How to stress and measure the Garbage Collector
CalvinH - Embedding quotes within a C# string - The Wit and Ramblings of David Giard
David Giard - Side by Side user scoped .NET Core installations on Linux with dotnet-install.sh
Scott Hanselman - Subqueries in LINQ -- Visual Studio Magazine
Peter Vogel
lunes, 29 de octubre de 2018
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Cancelación de peticiones en ASP.NET Core y MVC
José María Aguilar - Cómo reconocer a los buenos desarrolladores
José María Aguilar
.NET / .NET Core
- Dependabot for .NET Core dependency tracking in GitHub
Scott Hanselman - Use structures to improve the lisibility of your code
Gérald Barré - Venciendo el miedo a las pruebas unitarias en .Net
Jorge Turrado - C# Intermetiade - Queue, Stack and Hashtable Collections in C#
Marinko Spasojevic - .NET Core Source Code Analysis with Intel® VTune™ Amplifier
Varun Venkatesan, Li Tian & Denis Pravdin - Comparing speed of ToUpper, ToUpperInvariant, ToLower and ToLowerInvariant in .NET Framework and .NET Core
Jiří Činčura - Secure Random Integers in .NET Core 3
Kevin Jones - Playing with C# 7
Adam Storr - Performance in .NET – Part 2
Ricardo Peres
martes, 23 de octubre de 2018
Desde que comenzamos a programar con ASP.NET MVC tenemos interiorizado que si en nuestras acciones vemos código repetido, suele ser un candidato a ser implementado en forma de filtro. Así, durante años hemos implementado en forma de action filters asuntos transversales de nuestras aplicaciones, como la seguridad, logging, caching y otros aspectos.
Sin embargo, a veces olvidamos que estas mismas técnicas podemos utilizarlas para simplificar código en la implementación de convenciones o funciones más ligadas al negocio o a funcionalidades de nuestra aplicación. Por ejemplo, ¿no estáis aburridos de escribir acciones como las siguientes?
Sin embargo, a veces olvidamos que estas mismas técnicas podemos utilizarlas para simplificar código en la implementación de convenciones o funciones más ligadas al negocio o a funcionalidades de nuestra aplicación. Por ejemplo, ¿no estáis aburridos de escribir acciones como las siguientes?
public class FriendsController: Controller
{
public IActionResult View(int id)
{
var friend = _friendServices.GetById(id);
if(friend == null)
return NotFound();
... // Prepare and show "View" view
}
public IActionResult Edit(int id)
{
var friend = _friendServices.GetById(id);
if(friend == null)
return NotFound();
... // Prepare and show "Edit" view
}
public IActionResult Delete(int id)
{
var friend = _friendServices.GetById(id);
if(friend == null)
return NotFound();
... // Prepare and show "Delete" view
}
...
}
Pues bien, vamos a aplicar el mismo principio para simplificar este código y eliminar duplicidades extrayendo las porciones comunes a un filtro, resultando en algo así de bonito:
[Autoload(typeof(Friend))] // ¡Magia!
public class FriendsController: Controller
{
public Task<IActionResult> View(Friend friend)
{
... // Prepare and show "View" view
}
public Task<IActionResult> Edit(Friend friend)
{
... // Prepare and show "Edit" view
}
public Task<IActionResult> Delete(Friend friend)
{
... // Prepare and show "Delete" view
}
...
}
No sé lo útil que podrá resultar en la práctica pero, como mínimo, nos ayudará a conocer mejor cómo funciona por dentro el framework ASP.NET Core MVC.
lunes, 22 de octubre de 2018
Después del parón de la semana pasada debido a compromisos profesionales (¡hola, chic*s!), continuamos con una nueva recopilación de enlaces que, como siempre, espero que os resulten interesantes :)
Por si te lo perdiste...
- ¿Dónde está Server.MapPath() en ASP.NET Core?
José M. Aguilar - 7 Hábitos de personas altamente innovadoras
José M. Aguilar
.NET / .NET Core
- Announcing .NET Core 2.2 Preview 3
Rich Lander - No InternalsVisibleTo, no problem – bypassing C# visibility rules with Roslyn
Filip Woj - Announcing ML.NET 0.6 (Machine Learning .NET)
César de la Torre - Working with the Dynamic Type in C#
Camilo Reyes - Using multiple instances of strongly-typed settings with named options in .NET Core 2.x
Andrew Lock - New prescriptive guidance for Open Source .NET Library Authors
Scott Hanselman - Nice little trick when working with Expression API
Sacha Barber - .Net Core 2: Managing Secrets in Web Apps - TechNet Articles - United States (English)
Jayendran arumugam - When Is It Okay to Use a C# Partial Class?
Carlos Schults - C# Intermediate - Abstract Classes in C#
Marinko Spasojevic - Don't Code Tired | Setting Up Mock ref Return Values in Moq
Jason Roberts - #MLNET – Analizando datos de la Pipeline con la nueva version API 0.6.0 (gracias LINQ!)
Bruno Capuano - Inyección de Dependencias en .Net Framework
Jorge Turrado