Esercizio - Registrare e usare i servizi

Completato

Le app ASP.NET Core spesso devono accedere agli stessi servizi tra più componenti. ASP.NET Core usa un contenitore di inserimento delle dipendenze predefinito per gestire i servizi utilizzati da un'app.

Il responsabile del team richiede di creare un sito Web barebone per l'azienda. Il sito Web deve visualizzare un messaggio di benvenuto nella pagina principale. Si decide di creare un servizio per generare il messaggio di benvenuto. Si registrerà quindi il servizio con il contenitore del servizio in modo che possa essere inserito nei componenti necessari.

Creare un'app ASP.NET Core

È necessaria un'app ASP.NET Core per svolgere il ruolo dell'app del team. Ora verrà creata una nuova app ASP.NET Core usando l'estensione C# Dev Kit in Visual Studio Code.

  1. Avviare Visual Studio Code.

  2. Premere CTRL+MAIUSC+P per aprire il riquadro comandi.

  3. Cercare e selezionare .NET: Nuovo progetto....

  4. Cerca e seleziona ASP.NET Core Empty.

    Screenshot del riquadro comandi con ASP.NET Core Empty selezionato.

  5. Selezionare o creare una cartella per il nuovo progetto.

  6. Assegnare alla nuova app il nome MyWebApp.

  7. Selezionare Crea progetto per creare il progetto.

  8. Quando si apre il nuovo progetto, espandere il riquadro Solution Explorer per visualizzare i file di progetto.

    Screenshot del riquadro Esplora soluzioni in Visual Studio Code.

Eseguire l'app

Provare l'app per assicurarsi che venga eseguita.

  1. In Visual Studio Code premere F5 per compilare ed eseguire l'app.

    1. Quando richiesto, selezionare C# come debugger.
    2. Quando richiesto, selezionare C#: MyWebApp [Configurazione predefinita] come configurazione di avvio da usare.

    Questo comando avvia l'app e la ospita in un server Web locale. Si apre una finestra del browser che visualizza "Hello, World!"

  2. Chiudere la finestra del browser e fermare l'app premendo Maiusc+F5 in Visual Studio Code.

Creare un servizio

Ora che si dispone di un'app funzionante, creare un servizio che generi un messaggio di benvenuto per la pagina principale.

  1. Fare clic con il pulsante destro del mouse sul progetto MyWebApp nel riquadro Esplora risorse. Selezionare Nuova cartella. Denominare la cartella Servizi.

  2. Fare clic con il pulsante destro del mouse sulla cartella Servizi . Selezionare Nuovo file. Assegnare al file il nome WelcomeService.cs.

  3. Sostituire il contenuto di WelcomeService.cs con il codice seguente:

    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}";
        }
    }
    

    Questo codice definisce una classe WelcomeService con un metodo GetWelcomeMessage che genera un messaggio di benvenuto. Il messaggio include l'ora corrente di creazione del servizio, nonché un identificatore univoco per ogni istanza del servizio.

    Si noti che i campi _serviceCreated e _serviceId vengono impostati nel costruttore e non cambiano mai per la durata dell'istanza del servizio.

Registrare il servizio

Ora che si dispone di un servizio, è necessario registrarlo con il contenitore del servizio.

  1. Aprire il file Program.cs .

  2. Aggiungere la direttiva seguente all'inizio del file:

    using MyWebApp.Services;
    

    Questa direttiva risolve il riferimento alla classe WelcomeService.

  3. Aggiungere il codice seguente, subito dopo la riga var builder = WebApplication.CreateBuilder(args);:

    builder.Services.AddSingleton<WelcomeService>();
    

    WebApplication.CreateBuilder crea una nuova istanza della classe WebApplicationBuilder denominata builder. Il codice precedente registra la classe WelcomeService con il contenitore del servizio con una durata singleton.

  4. Modificare la riga app.MapGet("/", () => "Hello World!"); specificando il codice seguente:

    app.MapGet("/", (WelcomeService welcomeService) => welcomeService.GetWelcomeMessage());
    

    Questo codice esegue il mapping di una richiesta HTTP GET all'URL radice (/) a un delegato che restituisce il messaggio di benvenuto generato dal servizio WelcomeService.

    Il file Program.cs dovrebbe essere simile al seguente:

    using MyWebApp.Services;
    
    var builder = WebApplication.CreateBuilder(args);
    builder.Services.AddSingleton<WelcomeService>();
    
    var app = builder.Build();
    
    app.MapGet("/", (WelcomeService welcomeService) => welcomeService.GetWelcomeMessage());
    
    app.Run();
    

Testare le modifiche

  1. Salvare tutte le modifiche ed eseguire l'app come prima.
  2. Quando si apre la finestra del browser, si noti che l'URL radice visualizza il messaggio di benvenuto generato dal servizio WelcomeService.
  3. Chiudere la finestra del browser e fermare l'app premendo Maiusc+F5 in Visual Studio Code.

Usare un'interfaccia

Il team esamina il codice e un altro sviluppatore suggerisce di usare un'interfaccia per registrare i servizi, in quanto questo approccio rende il codice più flessibile e semplice da gestire.

  1. Fare clic con il pulsante destro del mouse sul progetto MyWebApp nel riquadro Esplora risorse. Selezionare Nuova cartella. Denominare la cartella Interfacce.

  2. Fare clic con il pulsante destro del mouse sulla cartella Interfacce . Selezionare Nuovo file. Assegnare al file il nome IWelcomeService.cs.

  3. Sostituire il contenuto di IWelcomeService.cs con il codice seguente:

    namespace MyWebApp.Interfaces
    
    public interface IWelcomeService
    {
        string GetWelcomeMessage();
    }
    

    Questo codice definisce un'interfaccia IWelcomeService con un metodo GetWelcomeMessage. Tutti i servizi che implementano questa interfaccia devono fornire un'implementazione per il metodo GetWelcomeMessage.

  4. Aprire il file Services/WelcomeService.cs .

  5. Aggiungere la direttiva seguente all'inizio del file:

    using MyWebApp.Interfaces;
    

    Questa direttiva risolve il riferimento all'interfaccia IWelcomeService aggiunta nel passaggio successivo.

  6. Aggiornare la dichiarazione di classe WelcomeService per implementare l'interfaccia IWelcomeService:

    public class WelcomeService : IWelcomeService
    

    Questa è l'unica modifica che è necessario apportare alla classe WelcomeService per implementare l'interfaccia IWelcomeService. La classe WelcomeService dispone già di un metodo GetWelcomeMessage che corrisponde alla firma del metodo nell'interfaccia IWelcomeService.

  7. Aprire il file Program.cs .

  8. Aggiornare la riga builder.Services.AddSingleton<WelcomeService>(); specificando il codice seguente:

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

    Questo codice registra la classe WelcomeService con il contenitore del servizio usando l'interfaccia IWelcomeService.

    Suggerimento

    In pratica, ciò significa: "Quando un componente chiede IWelcomeService, fornire un'istanza di WelcomeService".

  9. Aggiornare la riga app.MapGet("/", (WelcomeService welcomeService) => welcomeService.GetWelcomeMessage()); specificando il codice seguente:

    app.MapGet("/", (IWelcomeService welcomeService) => welcomeService.GetWelcomeMessage());
    

    La funzione anonima prevede ora IWelcomeService, anziché WelcomeService.

    Il file Program.cs dovrebbe essere simile al seguente:

    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();
    

Testare le modifiche

Testare l'app per assicurarsi che funzioni ancora come previsto.

  1. Salvare tutte le modifiche ed eseguire l'app come prima.
  2. Quando si apre la finestra del browser, si noti che l'URL radice visualizza il messaggio di benvenuto generato dal servizio WelcomeService.
  3. Lasciare l'app in esecuzione per l'esercizio successivo.