Ejercicio: Registro y consumo de servicios
Las aplicaciones ce ASP.NET Core a suelen necesitar el acceso a los mismos servicios en varios componentes. ASP.NET Core usa un contenedor integrado de inyección de dependencias para administrar los servicios que usa una aplicación.
El responsable de equipo le pide que cree un sitio web básico para su empresa. El sitio web debe mostrar un mensaje de bienvenida en la página principal. Decide crear un servicio para generar el mensaje de bienvenida. A continuación, registra el servicio con el contenedor de servicios para que se pueda insertar en componentes que lo necesiten.
Crear una aplicación de ASP.NET Core
Necesita una aplicación de ASP.NET Core para desempeñar el papel de la aplicación del equipo. Vamos a crear una nueva aplicación de ASP.NET Core mediante la extensión del Kit de desarrollo de C# en Visual Studio Code.
Inicie Visual Studio Code.
Presione Ctrl+Mayús+P para abrir la paleta de comandos.
Busque y seleccione .NET: Nuevo proyecto....
Busque y seleccione ASP.NET Core vacío.
Seleccione o cree una carpeta para el nuevo proyecto.
Asigne el nombre MyWebApp a la nueva aplicación.
Seleccione Crear proyecto para crear el proyecto.
Cuando se abra el nuevo proyecto, expanda el panel
Solution Explorerpara ver los archivos del proyecto.
Ejecución de la aplicación
Pruebe la aplicación para asegurarse de que se ejecuta.
En Visual Studio Code, presione F5 para compilar y ejecutar la aplicación.
- Cuando se le solicite, seleccione C# como depurador.
- Cuando se le solicite, seleccione C#: MyWebApp [Configuración predeterminada] como configuración de inicio que se va a usar.
Este comando inicia la aplicación y la hospeda en un servidor web local. Se abre una ventana del explorador y se muestra "¡Hola, mundo!"
Cierre la ventana del explorador y detenga la aplicación presionando Mayús+F5 en Visual Studio Code.
Crear un servicio
Ahora que tiene una aplicación en funcionamiento, vamos a crear un servicio que genere un mensaje de bienvenida para la página principal.
Haga clic con el botón derecho en el proyecto MyWebApp en el panel Explorador . Seleccione Nueva carpeta. Asigne a la carpeta el nombre Services.
Haga clic con el botón derecho en la carpeta Servicios. Seleccione Nuevo archivo. Asigne al archivo el nombre WelcomeService.cs.
Reemplace el contenido de WelcomeService.cs por el código siguiente:
namespace MyWebApp.Services; public class WelcomeService : IWelcomeService { DateTime _serviceCreated; Guid _serviceId; public WelcomeService() { _serviceCreated = DateTime.Now; _serviceId = Guid.NewGuid(); } public string GetWelcomeMessage() { return $"Welcome to Contoso! The current time is {_serviceCreated}. This service instance has an ID of {_serviceId}"; } }Este código define una clase
WelcomeServicecon un métodoGetWelcomeMessageque genera un mensaje de bienvenida. El mensaje incluye la hora actual en que se creó el servicio, así como un identificador único para cada instancia del servicio.Tenga en cuenta que los campos
_serviceCreatedy_serviceIdse establecen en el constructor y nunca cambian durante la vigencia de la instancia de servicio.
Registro del servicio
Ahora que tiene un servicio, debe registrarlo en el contenedor de servicios.
Abra el archivo Program.cs.
Agregue la siguiente directiva al principio del archivo:
using MyWebApp.Services;Esta directiva resuelve la referencia a la clase
WelcomeService.Agregue el código siguiente inmediatamente después de la línea
var builder = WebApplication.CreateBuilder(args);.builder.Services.AddSingleton<WelcomeService>();WebApplication.CreateBuildercrea una nueva instancia de la claseWebApplicationBuilderdenominadabuilder. El código anterior registra la claseWelcomeServicecon el contenedor de servicios con una duración singleton.Cambie la línea
app.MapGet("/", () => "Hello World!");al código siguiente:app.MapGet("/", (WelcomeService welcomeService) => welcomeService.GetWelcomeMessage());Este código asigna una solicitud HTTP GET a la dirección URL raíz (
/) a un delegado que devuelve el mensaje de bienvenida generado por el servicioWelcomeService.El archivo Program.cs debería tener un aspecto similar al siguiente:
using MyWebApp.Services; var builder = WebApplication.CreateBuilder(args); builder.Services.AddSingleton<WelcomeService>(); var app = builder.Build(); app.MapGet("/", (WelcomeService welcomeService) => welcomeService.GetWelcomeMessage()); app.Run();
Probar los cambios
- Guarde todos los cambios y ejecute la aplicación como antes.
- Cuando se abra la ventana del explorador, observe que la dirección URL raíz muestra el mensaje de bienvenida generado por el servicio
WelcomeService. - Cierre la ventana del explorador y detenga la aplicación presionando Mayús+F5 en Visual Studio Code.
Usar una interfaz
El equipo revisa el código y otro desarrollador sugiere que usa una interfaz para registrar los servicios, ya que este enfoque hace que el código sea más flexible y fácil de mantener.
Haga clic con el botón derecho en el proyecto MyWebApp en el panel Explorador . Seleccione Nueva carpeta. Denomine la carpeta Interfaces.
Haga clic con el botón derecho en la carpeta Interfaces. Seleccione Nuevo archivo. Asigne al archivo el nombre IWelcomeService.cs.
Reemplace el contenido de IWelcomeService.cs por el código siguiente:
namespace MyWebApp.Interfaces public interface IWelcomeService { string GetWelcomeMessage(); }Este código define una interfaz
IWelcomeServicecon un métodoGetWelcomeMessage. Todos los servicios que implementen esta interfaz deben proporcionar una implementación para el métodoGetWelcomeMessage.Abra el archivo Services/WelcomeService.cs.
Agregue la siguiente directiva al principio del archivo:
using MyWebApp.Interfaces;Esta directiva resuelve la referencia a la interfaz
IWelcomeServiceque agrega en el paso siguiente.Actualice la declaración de clase
WelcomeServicepara implementar la interfazIWelcomeService:public class WelcomeService : IWelcomeServiceEste es el único cambio que debe realizar en la clase
WelcomeServicepara implementar la interfazIWelcomeService. La claseWelcomeServiceya tiene un métodoGetWelcomeMessageque coincide con la firma del método en la interfazIWelcomeService.Abra el archivo Program.cs.
Actualice la línea
builder.Services.AddSingleton<WelcomeService>();al código siguiente:builder.Services.AddSingleton<IWelcomeService, WelcomeService>();Este código registra la clase
WelcomeServicecon el contenedor de servicios mediante la interfazIWelcomeService.Sugerencia
Piense en esto como decir: "Cuando un componente solicita una instancia de
IWelcomeService, proporcione una instancia deWelcomeService".Actualice la línea
app.MapGet("/", (WelcomeService welcomeService) => welcomeService.GetWelcomeMessage());al código siguiente:app.MapGet("/", (IWelcomeService welcomeService) => welcomeService.GetWelcomeMessage());La función anónima ahora espera un
IWelcomeServiceen lugar deWelcomeService.El archivo Program.cs debería tener un aspecto similar al siguiente:
using MyWebApp.Interfaces; using MyWebApp.Services; var builder = WebApplication.CreateBuilder(args); builder.Services.AddSingleton<IWelcomeService, WelcomeService>(); var app = builder.Build(); app.MapGet("/", (IWelcomeService welcomeService) => welcomeService.GetWelcomeMessage()); app.Run();
Probar los cambios
Vamos a probar la aplicación para asegurar que sigue funcionando según lo previsto.
- Guarde todos los cambios y ejecute la aplicación como antes.
- Cuando se abra la ventana del explorador, observe que la dirección URL raíz muestra el mensaje de bienvenida generado por el servicio
WelcomeService. - Deje la aplicación en ejecución para el ejercicio siguiente.