Ćwiczenie — rejestrowanie i korzystanie z usług

Ukończone

aplikacje ASP.NET Core często muszą uzyskiwać dostęp do tych samych usług w wielu składnikach. ASP.NET Core używa wbudowanego kontenera wstrzykiwania zależności do zarządzania usługami używanymi przez aplikację.

Twój zespół prowadzi zadania związane z tworzeniem witryny internetowej barebones dla twojej firmy. W witrynie internetowej powinien zostać wyświetlony komunikat powitalny na stronie głównej. Postanawiasz utworzyć usługę w celu wygenerowania wiadomości powitalnej. Następnie zarejestrujesz usługę w kontenerze usługi, aby można było go wstrzyknąć do składników, które jej potrzebują.

Tworzenie aplikacji ASP.NET Core

Potrzebujesz aplikacji ASP.NET Core, aby odgrywać rolę aplikacji twojego zespołu. Utwórzmy nową aplikację ASP.NET Core przy użyciu rozszerzenia C# Dev Kit w programie Visual Studio Code.

  1. Uruchom program Visual Studio Code.

  2. Naciśnij Ctrl+Shift+P , aby otworzyć paletę poleceń.

  3. Wyszukaj i wybierz pozycję .NET: Nowy projekt....

  4. Wyszukaj i wybierz ASP.NET Core Empty.

    Zrzut ekranu palety poleceń z wybraną ASP.NET Core Empty.

  5. Wybierz lub utwórz folder dla nowego projektu.

  6. Nadaj nowej aplikacji nazwę MyWebApp.

  7. Wybierz pozycję Utwórz projekt , aby utworzyć projekt.

  8. Po otwarciu nowego projektu rozwiń Solution Explorer okienko, aby wyświetlić pliki projektu.

    Zrzut ekranu przedstawiający okienko Eksplorator rozwiązań w programie Visual Studio Code.

Uruchom aplikację

Przetestuj aplikację, aby upewnić się, że jest uruchomiona.

  1. W programie Visual Studio Code naciśnij F5 , aby skompilować i uruchomić aplikację.

    1. Gdy zostaniesz o to poproszony, wybierz C# jako debugera.
    2. Po wyświetleniu monitu wybierz pozycję C#: MyWebApp [Konfiguracja domyślna] jako konfigurację uruchamiania do użycia.

    To polecenie uruchamia aplikację i hostuje ją na lokalnym serwerze internetowym. Zostanie otwarte okno przeglądarki z wyświetlonym komunikatem "Hello, World!"

  2. Zamknij okno przeglądarki i zatrzymaj aplikację, naciskając Shift+F5 w programie Visual Studio Code.

Tworzenie usługi

Teraz, gdy masz działającą aplikację, utwórzmy usługę, która generuje komunikat powitalny dla strony głównej.

  1. Kliknij prawym przyciskiem myszy projekt MyWebApp w okienku Eksplorator . Wybierz pozycję Nowy folder. Nadaj nazwę folderowi Services.

  2. Kliknij prawym przyciskiem myszy folder Usługi . Wybierz pozycję Nowy plik. Nadaj plikowi nazwę WelcomeService.cs.

  3. Zastąp zawartość WelcomeService.cs następującym kodem:

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

    Ten kod definiuje klasę WelcomeService z GetWelcomeMessage metodą, która generuje komunikat powitalny. Komunikat zawiera bieżącą godzinę utworzenia usługi, a także unikatowy identyfikator dla każdego wystąpienia usługi.

    Należy pamiętać, że _serviceCreated pola i _serviceId są ustawiane w konstruktorze i nigdy nie zmieniają się przez okres istnienia wystąpienia usługi.

Rejestrowanie usługi

Teraz, gdy masz usługę, musisz ją zarejestrować w kontenerze usługi.

  1. Otwórz plik Program.cs .

  2. Dodaj następującą dyrektywę na początku pliku:

    using MyWebApp.Services;
    

    Ta dyrektywa rozwiązuje odwołanie do WelcomeService klasy.

  3. Natychmiast po var builder = WebApplication.CreateBuilder(args); wierszu dodaj następujący kod:

    builder.Services.AddSingleton<WelcomeService>();
    

    WebApplication.CreateBuilder tworzy nowe wystąpienie WebApplicationBuilder klasy o nazwie builder. Powyższy kod rejestruje klasę WelcomeService w kontenerze usługi z pojedynczym okresem istnienia.

  4. Zmień wiersz na app.MapGet("/", () => "Hello World!"); następujący kod:

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

    Ten kod mapuje żądanie HTTP GET na główny adres URL (/) do delegata, który zwraca komunikat powitalny wygenerowany przez usługę WelcomeService .

    Plik Program.cs powinien wyglądać następująco:

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

Testowanie zmian

  1. Zapisz wszystkie zmiany i uruchom aplikację tak jak poprzednio.
  2. Po otwarciu okna przeglądarki zwróć uwagę, że główny adres URL wyświetla komunikat powitalny wygenerowany przez usługę WelcomeService .
  3. Zamknij okno przeglądarki i zatrzymaj aplikację, naciskając Shift+F5 w programie Visual Studio Code.

Korzystanie z interfejsu

Twój zespół przegląda twój kod, a inny deweloper sugeruje, że używasz interfejsu do rejestrowania usług, ponieważ takie podejście sprawia, że kod jest bardziej elastyczny i łatwiejszy w obsłudze.

  1. Kliknij prawym przyciskiem myszy projekt MyWebApp w okienku Eksplorator . Wybierz pozycję Nowy folder. Nadaj folderowi nazwę Interfejsy.

  2. Kliknij prawym przyciskiem myszy folder Interfejsy . Wybierz pozycję Nowy plik. Nadaj plikowi nazwę IWelcomeService.cs.

  3. Zastąp zawartość IWelcomeService.cs następującym kodem:

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

    Ten kod definiuje IWelcomeService interfejs z GetWelcomeMessage metodą . Wszystkie usługi implementujące ten interfejs muszą zapewnić implementację metody GetWelcomeMessage .

  4. Otwórz plik Services/WelcomeService.cs .

  5. Dodaj następującą dyrektywę na początku pliku:

    using MyWebApp.Interfaces;
    

    Ta dyrektywa rozwiązuje odwołanie do interfejsu dodanego IWelcomeService w następnym kroku.

  6. Zaktualizuj deklarację klasy, WelcomeService aby zaimplementować IWelcomeService interfejs:

    public class WelcomeService : IWelcomeService
    

    Jest to jedyna zmiana, którą należy wprowadzić do WelcomeService klasy w celu zaimplementowania interfejsu IWelcomeService . Klasa WelcomeService ma już metodę zgodną z sygnaturą GetWelcomeMessage metody w interfejsie IWelcomeService .

  7. Otwórz plik Program.cs .

  8. builder.Services.AddSingleton<WelcomeService>(); Zaktualizuj wiersz do następującego kodu:

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

    Ten kod rejestruje klasę WelcomeService w kontenerze usługi przy użyciu interfejsu IWelcomeService .

    Napiwek

    Pomyśl o tym, mówiąc: "Gdy składnik o element IWelcomeService, podaj wystąpienie WelcomeServiceelementu ."

  9. app.MapGet("/", (WelcomeService welcomeService) => welcomeService.GetWelcomeMessage()); Zaktualizuj wiersz do następującego kodu:

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

    Funkcja anonimowa oczekuje teraz elementu IWelcomeService zamiast WelcomeService.

    Plik Program.cs powinien wyglądać następująco:

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

Testowanie zmian

Przetestujmy aplikację, aby upewnić się, że nadal działa zgodnie z oczekiwaniami.

  1. Zapisz wszystkie zmiany i uruchom aplikację tak jak poprzednio.
  2. Po otwarciu okna przeglądarki zwróć uwagę, że główny adres URL wyświetla komunikat powitalny wygenerowany przez usługę WelcomeService .
  3. Pozostaw aplikację uruchomioną na potrzeby następnego ćwiczenia.