Por ello, en ASP.NET Core MVC, lo habitual es que implementemos nuestros controladores atendiendo a este principio, y para ello utilicemos la técnica de inyección de dependencias en el constructor:
public class InvoiceController: Controller
{
private readonly IInvoiceServices _invoiceServices;
private readonly IMapper _mapper;
private readonly ILogger<InvoiceController> _logger;
public InvoiceController(
IInvoiceServices invoiceServices,
ILogger<InvoiceController> logger,
IMapper mapper)
{
_invoiceServices = invoiceServices;
_logger = logger;
_mapper = mapper;
}
...
}
Nota: aunque en este post estemos hablando de controladores ASP.NET Core MVC, las ideas que vamos a comentar aquí son también aplicables a ASP.NET MVC "clásico" e incluso a otro tipo de frameworks que comparten los mismos conceptos.
Publicado por José M. Aguilar a las 8:55 a. m.
Etiquetas: aspnetcoremvc, aspnetmvc, buenas prácticas, patrones
Por si te lo perdiste...
- ¿Se pueden desarrollar aplicaciones ASP.NET Core con Visual Basic .NET?
José María Aguilar - Entre 10 y 28 desarrolladores por el precio de uno
José María Aguilar
.NET / .NET Core
- Caching http requests to debug faster
Gérald Barré - AutoMapper 8.0.0 Released
Jimmy Bogard - How to use the Abstract Factory design pattern in C#
Gary Woodfine - Como instalar .NetCore en Linux
Jorge Turrado - Getting Stack Overflow Localization Tooling Ready for .NET Core
Samo Prelog - Accessing NuGet Package Paths in Your .NET SDK Based csproj Files
Georg Dangl - Java vs C# – Part 3
Ricardo Peres - Code reliability: Unit testing with XUnit and FluentAssertions in .NET Core 2 apps
Anthony Giretti - Introducing the ML.NET – A Machine Learning library for .NET developers
Coding Notes - Cómo buscar patrones de búsqueda o coincidencias en C# dentro de un bucle switch & Cómo buscar patrones de búsqueda o coincidencias en C# dentro de un bucle switch con C# 6.0 o anterior
Jorge Serrano - How to Choose the Right .NET Collection Class?
Damir Arh
En este artículo vamos a ver cómo aprovechar las ventajas de la precompilación, y al mismo tiempo mantener la flexibilidad que nos ofrece la compilación en tiempo de ejecución que tradicionalmente hemos disfrutado en proyectos ASP.NET y ASP.NET Core.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Programación esotérica
José María Aguilar - Autenticación JWT en APIs con ASP.NET Core
José María Aguilar
.NET / .NET Core
- Building C# 8.0
Mads Torgersen - C#: Structs de un solo campo como typedefs
Eduard Tomás - .NET Core/ .NET Framework My Perspective On The Future
Mitchel Sellers - Cross-platform Time Zones with .NET Core
Christopher Roberts - .NET Core tooling update for Visual Studio 2017 version 15.9
Phillip Carter - Writing ILogger Diagnostics to a File
Christian Nagel - .NET Core 2.1.x será soportado hasta 3 años de la declaración TLS
Jorge Serrano - Some quick notes on converting String operations to use Span<T>
Matt Lacey - Handling a new era in the Japanese calendar in .NET
Ron Petrusha - Sample performance investigation using BenchmarkDotNet and PerfView
Adam Sitnik - A dynamic definite assignment puzzle
Eric Lippert - .NET Core Service Provider Gotchas and Less-Known Features
Ricardo Peres - Visual Basic in .NET Core 3.0
Kathleen Dollard
Hoy seguiremos profundizando en este tema, pero esta vez nos centraremos en modificar los textos por defecto de las anotaciones de datos y hacer que simplemente decorando una propiedad con un atributo como
Required
consigamos obtener mensajes de error localizados y a nuestro gusto, sin necesidad de establecer el ErrorMessage
de forma explícita y, en algunos casos, ni siquiera tener que indicar dicho atributo.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
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
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