Übung: Registrieren und Nutzen von Diensten
ASP.NET Core-Apps müssen häufig über mehrere Komponenten hinweg auf dieselben Dienste zugreifen. ASP.NET Core verwendet einen integrierten Abhängigkeitsinjektionscontainer, um die von einer App verwendeten Dienste zu verwalten.
Ihre Teamleitung beauftragt Sie, eine abgespeckte Website für Ihr Unternehmen zu erstellen. Die Website soll eine Willkommensnachricht auf der Hauptseite anzeigen. Sie entscheiden sich, einen Dienst zu erstellen, um die Willkommensnachricht zu generieren. Anschließend registrieren Sie den Dienst beim Dienstcontainer, damit er in Komponenten eingefügt werden kann, die ihn benötigen.
Erstellen einer ASP.NET Core -App
Sie benötigen eine ASP.NET Core-App, die die Rolle der App Ihres Teams übernimmt. Erstellen wir nun eine neue ASP.NET Core-App mit der C# Dev Kit-Erweiterung in Visual Studio Code.
Starten Sie Visual Studio Code.
Drücken Sie STRG+UMSCHALT+P, um die Befehlspalette zu öffnen.
Suchen und wählen Sie .NET: Neues Projekt....
Suchen Sie nach ASP.NET Core leer, und wählen Sie diese Option aus.
Wählen Sie einen Ordner für das neue Projekt aus, oder erstellen Sie einen Ordner.
Geben Sie der neuen App den Namen MyWebApp.
Klicken Sie auf Projekt erstellen, um das Projekt zu erstellen.
Wenn das neue Projekt geöffnet wird, erweitern Sie den Bereich
Solution Explorer, um die Projektdateien anzuzeigen.
Ausführen der App
Testen Sie die App, um sicherzustellen, dass sie ausgeführt wird.
Drücken Sie in Visual Studio Code F5, um die App zu erstellen und auszuführen.
- Wenn Sie dazu aufgefordert werden, wählen Sie C# als Debugger aus.
- Wenn Sie dazu aufgefordert werden, wählen Sie C#: MyWebApp [Standardkonfiguration] als zu verwendende Startkonfiguration aus.
Mit diesem Befehl wird die App gestartet und auf einem lokalen Webserver gehostet. Ein Browserfenster wird geöffnet und zeigt „Hallo Welt!“ an.
Schließen Sie das Browserfenster, und beenden Sie die App, indem Sie UMSCHALT+F5 in Visual Studio Code drücken.
Erstellen eines Diensts
Nachdem Sie nun über eine funktionierende App verfügen, erstellen wir einen Dienst, der eine Willkommensnachricht für die Hauptseite generiert.
Klicken Sie im Explorer-Bereich mit der rechten Maustaste auf das MyWebApp-Projekt. Wählen Sie "Neuer Ordner" aus. Geben Sie dem Ordner den Namen Dienste.
Klicken Sie mit der rechten Maustaste auf den Ordner Dienste. Wählen Sie "Neue Datei" aus. Benennen Sie die Datei WelcomeService.cs.
Ersetzen Sie den Inhalt von WelcomeService.cs durch den folgenden 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}"; } }Dieser Code definiert eine
WelcomeService-Klasse mit einerGetWelcomeMessage-Methode, die eine Willkommensnachricht generiert. Die Nachricht enthält die aktuelle Zeit, zu der der Dienst erstellt wurde, sowie einen eindeutigen Bezeichner für jede Instanz des Diensts.Beachten Sie, dass die Felder
_serviceCreatedund_serviceIdim Konstruktor festgelegt werden und sich während der Lebensdauer der Dienstinstanz nie ändern.
Registrieren des Diensts
Nachdem Sie nun über einen Dienst verfügen, müssen Sie ihn beim Dienstcontainer registrieren.
Öffnen Sie die Datei Program.cs.
Fügen Sie am Anfang der Datei die folgende -Anweisung hinzu:
using MyWebApp.Services;Diese Anweisung löst den Verweis auf die
WelcomeService-Klasse auf.Fügen Sie unmittelbar nach der Zeile
var builder = WebApplication.CreateBuilder(args);den folgenden Code hinzu:builder.Services.AddSingleton<WelcomeService>();WebApplication.CreateBuildererstellt eine neue Instanz derWebApplicationBuilder-Klasse namensbuilder. Der vorangehende Code registriert dieWelcomeService-Klasse beim Dienstcontainer mit einer Singleton-Lebensdauer.Ändern Sie die Zeile
app.MapGet("/", () => "Hello World!");in den folgenden Code:app.MapGet("/", (WelcomeService welcomeService) => welcomeService.GetWelcomeMessage());Dieser Code ordnet eine HTTP GET-Anforderung der Stamm-URL (
/) einem Delegaten zu, der die vomWelcomeService-Dienst generierte Willkommensnachricht zurückgibt.Die Datei Program.cs sollte wie folgt aussehen:
using MyWebApp.Services; var builder = WebApplication.CreateBuilder(args); builder.Services.AddSingleton<WelcomeService>(); var app = builder.Build(); app.MapGet("/", (WelcomeService welcomeService) => welcomeService.GetWelcomeMessage()); app.Run();
Testen der Änderungen
- Speichern Sie alle Änderungen, und führen Sie die App wie zuvor aus.
- Wenn das Browserfenster geöffnet wird, beachten Sie, dass unter der Stamm-URL die vom
WelcomeService-Dienst generierte Willkommensnachricht angezeigt wird. - Schließen Sie das Browserfenster, und beenden Sie die App, indem Sie UMSCHALT+F5 in Visual Studio Code drücken.
Verwenden einer Schnittstelle
Ihr Team überprüft Ihren Code, und ein anderer Entwickler schlägt vor, eine Schnittstelle zum Registrieren von Diensten zu verwenden, da dieser Ansatz den Code flexibler und einfacher zu verwalten macht.
Klicken Sie im Explorer-Bereich mit der rechten Maustaste auf das MyWebApp-Projekt. Wählen Sie "Neuer Ordner" aus. Geben Sie dem Ordner den Namen Schnittstellen.
Klicken Sie mit der rechten Maustaste auf den Ordner Schnittstellen. Wählen Sie "Neue Datei" aus. Benennen Sie die Datei IWelcomeService.cs.
Ersetzen Sie den Inhalt von IWelcomeService.cs durch den folgenden Code:
namespace MyWebApp.Interfaces public interface IWelcomeService { string GetWelcomeMessage(); }Dieser Code definiert eine
IWelcomeService-Schnittstelle mit einerGetWelcomeMessage-Methode. Alle Dienste, die diese Schnittstelle implementieren, müssen eine Implementierung für dieGetWelcomeMessage-Methode bereitstellen.Öffnen Sie die Datei Services/WelcomeService.cs.
Fügen Sie am Anfang der Datei die folgende -Anweisung hinzu:
using MyWebApp.Interfaces;Diese Anweisung löst den Verweis auf die
IWelcomeService-Schnittstelle auf, die Sie im nächsten Schritt hinzufügen.Aktualisieren Sie die
WelcomeService-Klassendeklaration, um dieIWelcomeService-Schnittstelle zu implementieren:public class WelcomeService : IWelcomeServiceDies ist die einzige Änderung, die Sie an der
WelcomeService-Klasse vornehmen müssen, um dieIWelcomeService-Schnittstelle zu implementieren. DieWelcomeService-Klasse verfügt bereits über eineGetWelcomeMessage-Methode, die der Methodensignatur in derIWelcomeService-Schnittstelle entspricht.Öffnen Sie die Datei Program.cs.
Ändern Sie die Zeile
builder.Services.AddSingleton<WelcomeService>();in den folgenden Code:builder.Services.AddSingleton<IWelcomeService, WelcomeService>();Dieser Code registriert die
WelcomeService-Klasse mithilfe derIWelcomeService-Schnittstelle beim Dienstcontainer.Tipp
Stellen Sie sich dies wie folgt vor: „Wenn eine Komponente nach
IWelcomeServicefragt, geben Sie eine Instanz vonWelcomeServicean.“Ändern Sie die Zeile
app.MapGet("/", (WelcomeService welcomeService) => welcomeService.GetWelcomeMessage());in den folgenden Code:app.MapGet("/", (IWelcomeService welcomeService) => welcomeService.GetWelcomeMessage());Die anonyme Funktion erwartet jetzt
IWelcomeServiceanstelle vonWelcomeService.Die Datei Program.cs sollte wie folgt aussehen:
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();
Testen der Änderungen
Testen wir die App, um sicherzustellen, dass sie weiterhin wie erwartet funktioniert.
- Speichern Sie alle Änderungen, und führen Sie die App wie zuvor aus.
- Wenn das Browserfenster geöffnet wird, beachten Sie, dass unter der Stamm-URL die vom
WelcomeService-Dienst generierte Willkommensnachricht angezeigt wird. - Lassen Sie die Anwendung für die nächste Übung geöffnet.