Esercizio - Registrare e usare i servizi
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.
Avviare Visual Studio Code.
Premere CTRL+MAIUSC+P per aprire il riquadro comandi.
Cercare e selezionare .NET: Nuovo progetto....
Cerca e seleziona ASP.NET Core Empty.
Selezionare o creare una cartella per il nuovo progetto.
Assegnare alla nuova app il nome MyWebApp.
Selezionare Crea progetto per creare il progetto.
Quando si apre il nuovo progetto, espandere il riquadro
Solution Explorerper visualizzare i file di progetto.
Eseguire l'app
Provare l'app per assicurarsi che venga eseguita.
In Visual Studio Code premere F5 per compilare ed eseguire l'app.
- Quando richiesto, selezionare C# come debugger.
- 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!"
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.
Fare clic con il pulsante destro del mouse sul progetto MyWebApp nel riquadro Esplora risorse. Selezionare Nuova cartella. Denominare la cartella Servizi.
Fare clic con il pulsante destro del mouse sulla cartella Servizi . Selezionare Nuovo file. Assegnare al file il nome WelcomeService.cs.
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
WelcomeServicecon un metodoGetWelcomeMessageche 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
_serviceCreatede_serviceIdvengono 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.
Aprire il file Program.cs .
Aggiungere la direttiva seguente all'inizio del file:
using MyWebApp.Services;Questa direttiva risolve il riferimento alla classe
WelcomeService.Aggiungere il codice seguente, subito dopo la riga
var builder = WebApplication.CreateBuilder(args);:builder.Services.AddSingleton<WelcomeService>();WebApplication.CreateBuildercrea una nuova istanza della classeWebApplicationBuilderdenominatabuilder. Il codice precedente registra la classeWelcomeServicecon il contenitore del servizio con una durata singleton.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 servizioWelcomeService.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
- Salvare tutte le modifiche ed eseguire l'app come prima.
- Quando si apre la finestra del browser, si noti che l'URL radice visualizza il messaggio di benvenuto generato dal servizio
WelcomeService. - 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.
Fare clic con il pulsante destro del mouse sul progetto MyWebApp nel riquadro Esplora risorse. Selezionare Nuova cartella. Denominare la cartella Interfacce.
Fare clic con il pulsante destro del mouse sulla cartella Interfacce . Selezionare Nuovo file. Assegnare al file il nome IWelcomeService.cs.
Sostituire il contenuto di IWelcomeService.cs con il codice seguente:
namespace MyWebApp.Interfaces public interface IWelcomeService { string GetWelcomeMessage(); }Questo codice definisce un'interfaccia
IWelcomeServicecon un metodoGetWelcomeMessage. Tutti i servizi che implementano questa interfaccia devono fornire un'implementazione per il metodoGetWelcomeMessage.Aprire il file Services/WelcomeService.cs .
Aggiungere la direttiva seguente all'inizio del file:
using MyWebApp.Interfaces;Questa direttiva risolve il riferimento all'interfaccia
IWelcomeServiceaggiunta nel passaggio successivo.Aggiornare la dichiarazione di classe
WelcomeServiceper implementare l'interfacciaIWelcomeService:public class WelcomeService : IWelcomeServiceQuesta è l'unica modifica che è necessario apportare alla classe
WelcomeServiceper implementare l'interfacciaIWelcomeService. La classeWelcomeServicedispone già di un metodoGetWelcomeMessageche corrisponde alla firma del metodo nell'interfacciaIWelcomeService.Aprire il file Program.cs .
Aggiornare la riga
builder.Services.AddSingleton<WelcomeService>();specificando il codice seguente:builder.Services.AddSingleton<IWelcomeService, WelcomeService>();Questo codice registra la classe
WelcomeServicecon il contenitore del servizio usando l'interfacciaIWelcomeService.Suggerimento
In pratica, ciò significa: "Quando un componente chiede
IWelcomeService, fornire un'istanza diWelcomeService".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.
- Salvare tutte le modifiche ed eseguire l'app come prima.
- Quando si apre la finestra del browser, si noti che l'URL radice visualizza il messaggio di benvenuto generato dal servizio
WelcomeService. - Lasciare l'app in esecuzione per l'esercizio successivo.

