Oefening: services registreren en gebruiken
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.
Start Visual Studio Code.
Druk op Ctrl+Shift+P om het opdrachtenpalet te openen.
Zoek en selecteer .NET: Nieuw project....
Zoek en selecteer ASP.NET Core Empty.
Selecteer of maak een map voor het nieuwe project.
Geef de nieuwe app de naam MyWebApp.
Selecteer Project maken om het project te maken.
Wanneer het nieuwe project wordt geopend, vouwt u het
Solution Explorerdeelvenster uit om de projectbestanden weer te geven.
De app uitvoeren
Test de app om ervoor te zorgen dat deze wordt uitgevoerd.
Druk in Visual Studio Code op F5 om de app te bouwen en uit te voeren.
- Wanneer u hierom wordt gevraagd, selecteert u C# als het foutopsporingsprogramma.
- 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
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.
Klik met de rechtermuisknop op het project MyWebApp in het deelvenster Explorer . Selecteer Nieuwe map. Geef een naam op voor de map Services.
Klik met de rechtermuisknop op de Services-map. Selecteer Nieuw bestand. Geef het bestand een naam WelcomeService.cs.
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
WelcomeServiceklasse met eenGetWelcomeMessagemethode 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
_serviceCreatedvelden_serviceIdin 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.
Open het Program.cs-bestand .
Voeg de volgende instructie toe aan het begin van het bestand:
using MyWebApp.Services;Deze richtlijn lost de verwijzing naar de
WelcomeServiceklasse op.Voeg direct na de
var builder = WebApplication.CreateBuilder(args);regel de volgende code toe:builder.Services.AddSingleton<WelcomeService>();WebApplication.CreateBuildermaakt een nieuw exemplaar van de klasse met deWebApplicationBuildernaambuilder. De voorgaande code registreert deWelcomeServiceklasse bij de servicecontainer met een levensduur als singleton.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 deWelcomeServiceservice 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
- Sla al uw wijzigingen op en voer de app uit zoals voorheen.
- Wanneer het browservenster wordt geopend, ziet u dat in de hoofd-URL het welkomstbericht wordt weergegeven dat door de
WelcomeServiceservice wordt gegenereerd. - 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.
Klik met de rechtermuisknop op het project MyWebApp in het deelvenster Explorer . Selecteer Nieuwe map. Geef de map interfaces een naam.
Klik met de rechtermuisknop op de Interfaces-map. Selecteer Nieuw bestand. Geef het bestand een naam IWelcomeService.cs.
Vervang de inhoud van IWelcomeService.cs door de volgende code:
namespace MyWebApp.Interfaces public interface IWelcomeService { string GetWelcomeMessage(); }Deze code definieert een
IWelcomeServiceinterface met eenGetWelcomeMessagemethode. Alle services die deze interface implementeren, moeten een implementatie bieden voor deGetWelcomeMessagemethode.Open het bestand Services/WelcomeService.cs .
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
IWelcomeServiceinterface toevoegt, verwerkt.Werk de
WelcomeServiceklassedeclaratie bij om deIWelcomeServiceinterface te implementeren:public class WelcomeService : IWelcomeServiceDit is de enige wijziging die u moet aanbrengen in de
WelcomeServiceklasse om deIWelcomeServiceinterface te implementeren. DeWelcomeServiceklasse heeft al eenGetWelcomeMessagemethode die overeenkomt met de methodehandtekening in deIWelcomeServiceinterface.Open het Program.cs-bestand .
Werk de
builder.Services.AddSingleton<WelcomeService>();regel bij naar de volgende code:builder.Services.AddSingleton<IWelcomeService, WelcomeService>();Met deze code wordt de
WelcomeServiceklasse geregistreerd bij de servicecontainer met behulp van deIWelcomeServiceinterface.Tip
U kunt dit zien als het volgende: 'Wanneer een onderdeel vraagt om een
IWelcomeService, geef een exemplaar vanWelcomeService'.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
IWelcomeServicein plaats van eenWelcomeService.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.
- Sla al uw wijzigingen op en voer de app uit zoals voorheen.
- Wanneer het browservenster wordt geopend, ziet u dat in de hoofd-URL het welkomstbericht wordt weergegeven dat door de
WelcomeServiceservice wordt gegenereerd. - Laat de app actief voor de volgende oefening.