Oefening: services registreren en gebruiken

Voltooid

ASP.NET Core-apps hebben vaak toegang nodig tot dezelfde services in meerdere onderdelen. ASP.NET Core maakt gebruik van een ingebouwde container voor afhankelijkheidsinjectie om de services te beheren die een app gebruikt.

Uw teamleider geeft u de taak om een eenvoudige website voor uw bedrijf te maken. De website moet een welkomstbericht weergeven op de hoofdpagina. U besluit een service te maken om het welkomstbericht te genereren. Vervolgens registreert u de service bij de servicecontainer, zodat deze kan worden geïnjecteerd in onderdelen die deze nodig hebben.

Een ASP.NET Core-app maken

U hebt een ASP.NET Core-app nodig om de rol van de app van uw team te spelen. Laten we een nieuwe ASP.NET Core-app maken met behulp van de C#Dev Kit-extensie in Visual Studio Code.

  1. Start Visual Studio Code.

  2. Druk op Ctrl+Shift+P om het opdrachtenpalet te openen.

  3. Zoek en selecteer .NET: Nieuw project....

  4. Zoek en selecteer ASP.NET Core Empty.

    Een schermopname van het opdrachtpalet met ASP.NET Core Empty geselecteerd.

  5. Selecteer of maak een map voor het nieuwe project.

  6. Geef de nieuwe app de naam MyWebApp.

  7. Selecteer Project maken om het project te maken.

  8. Wanneer het nieuwe project wordt geopend, vouwt u het Solution Explorer deelvenster uit om de projectbestanden weer te geven.

    Een schermopname van het deelvenster Solution Explorer in Visual Studio Code.

De app uitvoeren

Test de app om ervoor te zorgen dat deze wordt uitgevoerd.

  1. Druk in Visual Studio Code op F5 om de app te bouwen en uit te voeren.

    1. Wanneer u hierom wordt gevraagd, selecteert u C# als het foutopsporingsprogramma.
    2. Wanneer u hierom wordt gevraagd, selecteert u C#: MyWebApp [Standaardconfiguratie] als de startconfiguratie die u wilt gebruiken.

    Met deze opdracht wordt de app gestart en gehost op een lokale webserver. Er wordt een browservenster geopend en wordt 'Hallo, wereld!' weergegeven

  2. Sluit het browservenster en stop de app door in Visual Studio Code op Shift+F5 te drukken.

Een service maken

Nu u een werkende app hebt, gaan we een service maken waarmee een welkomstbericht voor de hoofdpagina wordt gegenereerd.

  1. Klik met de rechtermuisknop op het project MyWebApp in het deelvenster Explorer . Selecteer Nieuwe map. Geef een naam op voor de map Services.

  2. Klik met de rechtermuisknop op de Services-map. Selecteer Nieuw bestand. Geef het bestand een naam WelcomeService.cs.

  3. Vervang de inhoud van WelcomeService.cs door de volgende code:

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

    Deze code definieert een WelcomeService klasse met een GetWelcomeMessage methode waarmee een welkomstbericht wordt gegenereerd. Het bericht bevat het tijdstip waarop de service is aangemaakt, evenals een unieke identificatie voor elke instantie van de service.

    Houd er rekening mee dat de _serviceCreated velden _serviceId in de constructor worden ingesteld en dat ze nooit veranderen voor de levensduur van het service-exemplaar.

De service registreren

Nu u een service hebt, moet u deze registreren bij de servicecontainer.

  1. Open het Program.cs-bestand .

  2. Voeg de volgende instructie toe aan het begin van het bestand:

    using MyWebApp.Services;
    

    Deze richtlijn lost de verwijzing naar de WelcomeService klasse op.

  3. Voeg direct na de var builder = WebApplication.CreateBuilder(args); regel de volgende code toe:

    builder.Services.AddSingleton<WelcomeService>();
    

    WebApplication.CreateBuilder maakt een nieuw exemplaar van de klasse met de WebApplicationBuilder naam builder. De voorgaande code registreert de WelcomeService klasse bij de servicecontainer met een levensduur als singleton.

  4. Wijzig de app.MapGet("/", () => "Hello World!"); regel in de volgende code:

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

    Met deze code wordt een HTTP GET-aanvraag toegewezen aan de hoofd-URL (/) aan een gemachtigde die het welkomstbericht retourneert dat door de WelcomeService service wordt gegenereerd.

    Uw Program.cs-bestand moet er als volgt uitzien:

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

De wijzigingen testen

  1. Sla al uw wijzigingen op en voer de app uit zoals voorheen.
  2. Wanneer het browservenster wordt geopend, ziet u dat in de hoofd-URL het welkomstbericht wordt weergegeven dat door de WelcomeService service wordt gegenereerd.
  3. Sluit het browservenster en stop de app door in Visual Studio Code op Shift+F5 te drukken.

Een interface gebruiken

Uw team beoordeelt uw code en een andere ontwikkelaar stelt voor dat u een interface gebruikt om services te registreren, omdat deze benadering de code flexibeler en eenvoudiger te onderhouden maakt.

  1. Klik met de rechtermuisknop op het project MyWebApp in het deelvenster Explorer . Selecteer Nieuwe map. Geef de map interfaces een naam.

  2. Klik met de rechtermuisknop op de Interfaces-map. Selecteer Nieuw bestand. Geef het bestand een naam IWelcomeService.cs.

  3. Vervang de inhoud van IWelcomeService.cs door de volgende code:

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

    Deze code definieert een IWelcomeService interface met een GetWelcomeMessage methode. Alle services die deze interface implementeren, moeten een implementatie bieden voor de GetWelcomeMessage methode.

  4. Open het bestand Services/WelcomeService.cs .

  5. Voeg de volgende instructie toe aan het begin van het bestand:

    using MyWebApp.Interfaces;
    

    Met deze richtlijn wordt de verwijzing die u in de volgende stap naar de IWelcomeService interface toevoegt, verwerkt.

  6. Werk de WelcomeService klassedeclaratie bij om de IWelcomeService interface te implementeren:

    public class WelcomeService : IWelcomeService
    

    Dit is de enige wijziging die u moet aanbrengen in de WelcomeService klasse om de IWelcomeService interface te implementeren. De WelcomeService klasse heeft al een GetWelcomeMessage methode die overeenkomt met de methodehandtekening in de IWelcomeService interface.

  7. Open het Program.cs-bestand .

  8. Werk de builder.Services.AddSingleton<WelcomeService>(); regel bij naar de volgende code:

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

    Met deze code wordt de WelcomeService klasse geregistreerd bij de servicecontainer met behulp van de IWelcomeService interface.

    Tip

    U kunt dit zien als het volgende: 'Wanneer een onderdeel vraagt om een IWelcomeService, geef een exemplaar van WelcomeService'.

  9. Werk de app.MapGet("/", (WelcomeService welcomeService) => welcomeService.GetWelcomeMessage()); regel bij naar de volgende code:

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

    De anonieme functie verwacht nu een IWelcomeService in plaats van een WelcomeService.

    Uw Program.cs-bestand moet er als volgt uitzien:

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

De wijzigingen testen

We gaan de app testen om ervoor te zorgen dat deze nog steeds werkt zoals verwacht.

  1. Sla al uw wijzigingen op en voer de app uit zoals voorheen.
  2. Wanneer het browservenster wordt geopend, ziet u dat in de hoofd-URL het welkomstbericht wordt weergegeven dat door de WelcomeService service wordt gegenereerd.
  3. Laat de app actief voor de volgende oefening.