Ćwiczenie — rejestrowanie i korzystanie z usług
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.
Uruchom program Visual Studio Code.
Naciśnij Ctrl+Shift+P , aby otworzyć paletę poleceń.
Wyszukaj i wybierz pozycję .NET: Nowy projekt....
Wyszukaj i wybierz ASP.NET Core Empty.
Wybierz lub utwórz folder dla nowego projektu.
Nadaj nowej aplikacji nazwę MyWebApp.
Wybierz pozycję Utwórz projekt , aby utworzyć projekt.
Po otwarciu nowego projektu rozwiń
Solution Explorerokienko, aby wyświetlić pliki projektu.
Uruchom aplikację
Przetestuj aplikację, aby upewnić się, że jest uruchomiona.
W programie Visual Studio Code naciśnij F5 , aby skompilować i uruchomić aplikację.
- Gdy zostaniesz o to poproszony, wybierz C# jako debugera.
- 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!"
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.
Kliknij prawym przyciskiem myszy projekt MyWebApp w okienku Eksplorator . Wybierz pozycję Nowy folder. Nadaj nazwę folderowi Services.
Kliknij prawym przyciskiem myszy folder Usługi . Wybierz pozycję Nowy plik. Nadaj plikowi nazwę WelcomeService.cs.
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ę
WelcomeServicezGetWelcomeMessagemetodą, 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
_serviceCreatedpola i_serviceIdsą 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.
Otwórz plik Program.cs .
Dodaj następującą dyrektywę na początku pliku:
using MyWebApp.Services;Ta dyrektywa rozwiązuje odwołanie do
WelcomeServiceklasy.Natychmiast po
var builder = WebApplication.CreateBuilder(args);wierszu dodaj następujący kod:builder.Services.AddSingleton<WelcomeService>();WebApplication.CreateBuildertworzy nowe wystąpienieWebApplicationBuilderklasy o nazwiebuilder. Powyższy kod rejestruje klasęWelcomeServicew kontenerze usługi z pojedynczym okresem istnienia.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
- Zapisz wszystkie zmiany i uruchom aplikację tak jak poprzednio.
- Po otwarciu okna przeglądarki zwróć uwagę, że główny adres URL wyświetla komunikat powitalny wygenerowany przez usługę
WelcomeService. - 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.
Kliknij prawym przyciskiem myszy projekt MyWebApp w okienku Eksplorator . Wybierz pozycję Nowy folder. Nadaj folderowi nazwę Interfejsy.
Kliknij prawym przyciskiem myszy folder Interfejsy . Wybierz pozycję Nowy plik. Nadaj plikowi nazwę IWelcomeService.cs.
Zastąp zawartość IWelcomeService.cs następującym kodem:
namespace MyWebApp.Interfaces public interface IWelcomeService { string GetWelcomeMessage(); }Ten kod definiuje
IWelcomeServiceinterfejs zGetWelcomeMessagemetodą . Wszystkie usługi implementujące ten interfejs muszą zapewnić implementację metodyGetWelcomeMessage.Otwórz plik Services/WelcomeService.cs .
Dodaj następującą dyrektywę na początku pliku:
using MyWebApp.Interfaces;Ta dyrektywa rozwiązuje odwołanie do interfejsu dodanego
IWelcomeServicew następnym kroku.Zaktualizuj deklarację klasy,
WelcomeServiceaby zaimplementowaćIWelcomeServiceinterfejs:public class WelcomeService : IWelcomeServiceJest to jedyna zmiana, którą należy wprowadzić do
WelcomeServiceklasy w celu zaimplementowania interfejsuIWelcomeService. KlasaWelcomeServicema już metodę zgodną z sygnaturąGetWelcomeMessagemetody w interfejsieIWelcomeService.Otwórz plik Program.cs .
builder.Services.AddSingleton<WelcomeService>();Zaktualizuj wiersz do następującego kodu:builder.Services.AddSingleton<IWelcomeService, WelcomeService>();Ten kod rejestruje klasę
WelcomeServicew kontenerze usługi przy użyciu interfejsuIWelcomeService.Napiwek
Pomyśl o tym, mówiąc: "Gdy składnik o element
IWelcomeService, podaj wystąpienieWelcomeServiceelementu ."app.MapGet("/", (WelcomeService welcomeService) => welcomeService.GetWelcomeMessage());Zaktualizuj wiersz do następującego kodu:app.MapGet("/", (IWelcomeService welcomeService) => welcomeService.GetWelcomeMessage());Funkcja anonimowa oczekuje teraz elementu
IWelcomeServicezamiastWelcomeService.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.
- Zapisz wszystkie zmiany i uruchom aplikację tak jak poprzednio.
- Po otwarciu okna przeglądarki zwróć uwagę, że główny adres URL wyświetla komunikat powitalny wygenerowany przez usługę
WelcomeService. - Pozostaw aplikację uruchomioną na potrzeby następnego ćwiczenia.