Übung: Registrieren und Nutzen von Diensten

Abgeschlossen

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.

  1. Starten Sie Visual Studio Code.

  2. Drücken Sie STRG+UMSCHALT+P, um die Befehlspalette zu öffnen.

  3. Suchen und wählen Sie .NET: Neues Projekt....

  4. Suchen Sie nach ASP.NET Core leer, und wählen Sie diese Option aus.

    Screenshot: Befehlspalette mit ausgewählter Option „ASP.NET Core leer“

  5. Wählen Sie einen Ordner für das neue Projekt aus, oder erstellen Sie einen Ordner.

  6. Geben Sie der neuen App den Namen MyWebApp.

  7. Klicken Sie auf Projekt erstellen, um das Projekt zu erstellen.

  8. Wenn das neue Projekt geöffnet wird, erweitern Sie den Bereich Solution Explorer, um die Projektdateien anzuzeigen.

    Screenshot: Bereich mit dem Projektmappen-Explorer in Visual Studio Code

Ausführen der App

Testen Sie die App, um sicherzustellen, dass sie ausgeführt wird.

  1. Drücken Sie in Visual Studio Code F5, um die App zu erstellen und auszuführen.

    1. Wenn Sie dazu aufgefordert werden, wählen Sie C# als Debugger aus.
    2. 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.

  2. 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.

  1. 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.

  2. Klicken Sie mit der rechten Maustaste auf den Ordner Dienste. Wählen Sie "Neue Datei" aus. Benennen Sie die Datei WelcomeService.cs.

  3. 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 einer GetWelcomeMessage-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 _serviceCreated und _serviceId im 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.

  1. Öffnen Sie die Datei Program.cs.

  2. 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.

  3. Fügen Sie unmittelbar nach der Zeile var builder = WebApplication.CreateBuilder(args); den folgenden Code hinzu:

    builder.Services.AddSingleton<WelcomeService>();
    

    WebApplication.CreateBuilder erstellt eine neue Instanz der WebApplicationBuilder-Klasse namens builder. Der vorangehende Code registriert die WelcomeService-Klasse beim Dienstcontainer mit einer Singleton-Lebensdauer.

  4. Ä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 vom WelcomeService-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

  1. Speichern Sie alle Änderungen, und führen Sie die App wie zuvor aus.
  2. Wenn das Browserfenster geöffnet wird, beachten Sie, dass unter der Stamm-URL die vom WelcomeService-Dienst generierte Willkommensnachricht angezeigt wird.
  3. 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.

  1. 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.

  2. Klicken Sie mit der rechten Maustaste auf den Ordner Schnittstellen. Wählen Sie "Neue Datei" aus. Benennen Sie die Datei IWelcomeService.cs.

  3. 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 einer GetWelcomeMessage-Methode. Alle Dienste, die diese Schnittstelle implementieren, müssen eine Implementierung für die GetWelcomeMessage-Methode bereitstellen.

  4. Öffnen Sie die Datei Services/WelcomeService.cs.

  5. 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.

  6. Aktualisieren Sie die WelcomeService-Klassendeklaration, um die IWelcomeService-Schnittstelle zu implementieren:

    public class WelcomeService : IWelcomeService
    

    Dies ist die einzige Änderung, die Sie an der WelcomeService-Klasse vornehmen müssen, um die IWelcomeService-Schnittstelle zu implementieren. Die WelcomeService-Klasse verfügt bereits über eine GetWelcomeMessage-Methode, die der Methodensignatur in der IWelcomeService-Schnittstelle entspricht.

  7. Öffnen Sie die Datei Program.cs.

  8. Ändern Sie die Zeile builder.Services.AddSingleton<WelcomeService>(); in den folgenden Code:

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

    Dieser Code registriert die WelcomeService-Klasse mithilfe der IWelcomeService-Schnittstelle beim Dienstcontainer.

    Tipp

    Stellen Sie sich dies wie folgt vor: „Wenn eine Komponente nach IWelcomeService fragt, geben Sie eine Instanz von WelcomeService an.“

  9. Ä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 IWelcomeService anstelle von WelcomeService.

    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.

  1. Speichern Sie alle Änderungen, und führen Sie die App wie zuvor aus.
  2. Wenn das Browserfenster geöffnet wird, beachten Sie, dass unter der Stamm-URL die vom WelcomeService-Dienst generierte Willkommensnachricht angezeigt wird.
  3. Lassen Sie die Anwendung für die nächste Übung geöffnet.