Ejercicio: Registro y consumo de servicios

Completado

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.

  1. Inicie Visual Studio Code.

  2. Presione Ctrl+Mayús+P para abrir la paleta de comandos.

  3. Busque y seleccione .NET: Nuevo proyecto....

  4. Busque y seleccione ASP.NET Core vacío.

    Recorte de pantalla de la paleta de comandos con ASP.NET Core vacío seleccionado.

  5. Seleccione o cree una carpeta para el nuevo proyecto.

  6. Asigne el nombre MyWebApp a la nueva aplicación.

  7. Seleccione Crear proyecto para crear el proyecto.

  8. Cuando se abra el nuevo proyecto, expanda el panel Solution Explorer para ver los archivos del proyecto.

    Recorte de pantalla del panel Explorador de soluciones en Visual Studio Code.

Ejecución de la aplicación

Pruebe la aplicación para asegurarse de que se ejecuta.

  1. En Visual Studio Code, presione F5 para compilar y ejecutar la aplicación.

    1. Cuando se le solicite, seleccione C# como depurador.
    2. 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!"

  2. 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.

  1. 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.

  2. Haga clic con el botón derecho en la carpeta Servicios. Seleccione Nuevo archivo. Asigne al archivo el nombre WelcomeService.cs.

  3. 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 WelcomeService con un método GetWelcomeMessage que 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 _serviceCreated y _serviceId se 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.

  1. Abra el archivo Program.cs.

  2. Agregue la siguiente directiva al principio del archivo:

    using MyWebApp.Services;
    

    Esta directiva resuelve la referencia a la clase WelcomeService.

  3. Agregue el código siguiente inmediatamente después de la línea var builder = WebApplication.CreateBuilder(args);.

    builder.Services.AddSingleton<WelcomeService>();
    

    WebApplication.CreateBuilder crea una nueva instancia de la clase WebApplicationBuilder denominada builder. El código anterior registra la clase WelcomeService con el contenedor de servicios con una duración singleton.

  4. 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 servicio WelcomeService.

    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

  1. Guarde todos los cambios y ejecute la aplicación como antes.
  2. 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.
  3. 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.

  1. Haga clic con el botón derecho en el proyecto MyWebApp en el panel Explorador . Seleccione Nueva carpeta. Denomine la carpeta Interfaces.

  2. Haga clic con el botón derecho en la carpeta Interfaces. Seleccione Nuevo archivo. Asigne al archivo el nombre IWelcomeService.cs.

  3. 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 IWelcomeService con un método GetWelcomeMessage. Todos los servicios que implementen esta interfaz deben proporcionar una implementación para el método GetWelcomeMessage.

  4. Abra el archivo Services/WelcomeService.cs.

  5. Agregue la siguiente directiva al principio del archivo:

    using MyWebApp.Interfaces;
    

    Esta directiva resuelve la referencia a la interfaz IWelcomeService que agrega en el paso siguiente.

  6. Actualice la declaración de clase WelcomeService para implementar la interfaz IWelcomeService:

    public class WelcomeService : IWelcomeService
    

    Este es el único cambio que debe realizar en la clase WelcomeService para implementar la interfaz IWelcomeService. La clase WelcomeService ya tiene un método GetWelcomeMessage que coincide con la firma del método en la interfaz IWelcomeService.

  7. Abra el archivo Program.cs.

  8. Actualice la línea builder.Services.AddSingleton<WelcomeService>(); al código siguiente:

    builder.Services.AddSingleton<IWelcomeService, WelcomeService>();
    

    Este código registra la clase WelcomeService con el contenedor de servicios mediante la interfaz IWelcomeService.

    Sugerencia

    Piense en esto como decir: "Cuando un componente solicita una instancia de IWelcomeService, proporcione una instancia de WelcomeService".

  9. 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 IWelcomeService en lugar de WelcomeService.

    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.

  1. Guarde todos los cambios y ejecute la aplicación como antes.
  2. 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.
  3. Deje la aplicación en ejecución para el ejercicio siguiente.