Упражнение. Регистрация и использование служб
ASP.NET Приложения Core часто имеют доступ к тем же службам в нескольких компонентах. ASP.NET Core использует встроенный контейнер внедрения зависимостей для управления службами, которые использует приложение.
Ваша команда ведет задачи по созданию веб-сайта barebones для вашей компании. Веб-сайт должен отображать приветственное сообщение на главной странице. Вы решили создать службу, чтобы создать приветственное сообщение. Затем вы зарегистрируете службу в контейнере службы, чтобы его можно было внедрить в компоненты, необходимые для него.
Создание приложения ASP.NET Core
Вам потребуется приложение ASP.NET Core, чтобы играть роль приложения вашей команды. Давайте создадим новое приложение ASP.NET Core с помощью расширения набора средств разработки на C# в Visual Studio Code.
Запустите Visual Studio Code.
Нажмите клавиши CTRL+SHIFT+P , чтобы открыть палитру команд.
Найдите и выберите .NET: Создать проект....
Найдите и выберите ASP.NET Core Empty.
Выберите или создайте папку для нового проекта.
Назовите новое приложение MyWebApp.
Выберите Создать проект, и проект будет создан.
Когда откроется новый проект, разверните
Solution Explorerпанель для просмотра файлов проекта.
Выполнить приложение
Протестируйте приложение, чтобы убедиться, что он выполняется.
В Visual Studio Code нажмите клавишу F5 , чтобы создать и запустить приложение.
- При появлении запроса выберите C# в качестве отладчика.
- При появлении запроса выберите C#: MyWebApp [Конфигурация по умолчанию] в качестве используемой конфигурации запуска.
Эта команда запускает приложение и размещает его на локальном веб-сервере. Откроется окно браузера и отображается сообщение "Hello, World!"
Закройте окно браузера и остановите приложение, нажав клавиши SHIFT+F5 в Visual Studio Code.
Создание сервиса
Теперь, когда у вас есть рабочее приложение, давайте создадим службу, которая создает приветственное сообщение для главной страницы.
Щелкните правой кнопкой мыши проект MyWebApp в области обозревателя . Выберите новую папку. Присвойте этой папке имя Services.
Щелкните правой кнопкой мыши папку "Службы ". Выберите новый файл. Назовите файл WelcomeService.cs.
Замените содержимое WelcomeService.cs следующим кодом:
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}"; } }Этот код определяет
WelcomeServiceкласс с методомGetWelcomeMessage, который создает приветственное сообщение. Сообщение включает текущее время создания службы, а также уникальный идентификатор для каждого экземпляра службы.Обратите внимание, что
_serviceCreatedв конструкторе заданы поля и_serviceIdони никогда не изменяются в течение всего времени существования экземпляра службы.
Регистрация службы
Теперь, когда у вас есть служба, необходимо зарегистрировать ее в контейнере службы.
Откройте файл Program.cs.
Добавьте следующую директиву в начало файла.
using MyWebApp.Services;Эта директива разрешает ссылку на
WelcomeServiceкласс.Сразу после
var builder = WebApplication.CreateBuilder(args);строки добавьте следующий код:builder.Services.AddSingleton<WelcomeService>();WebApplication.CreateBuilderсоздает новый экземпляр вызываемогоWebApplicationBuilderbuilderкласса. Предыдущий код регистрируетWelcomeServiceкласс в контейнере службы с одним временем существования.Измените строку на
app.MapGet("/", () => "Hello World!");следующий код:app.MapGet("/", (WelcomeService welcomeService) => welcomeService.GetWelcomeMessage());Этот код сопоставляет HTTP-запрос GET с корневым URL-адресом (
/) делегатом, который возвращает приветственное сообщение, созданноеWelcomeServiceслужбой.Файл Program.cs должен выглядеть следующим образом:
using MyWebApp.Services; var builder = WebApplication.CreateBuilder(args); builder.Services.AddSingleton<WelcomeService>(); var app = builder.Build(); app.MapGet("/", (WelcomeService welcomeService) => welcomeService.GetWelcomeMessage()); app.Run();
Тестирование изменений
- Сохраните все изменения и запустите приложение, как и раньше.
- Когда откроется окно браузера, обратите внимание, что корневой URL-адрес отображает приветственное сообщение, созданное
WelcomeServiceслужбой. - Закройте окно браузера и остановите приложение, нажав клавиши SHIFT+F5 в Visual Studio Code.
Использование интерфейса
Ваша команда проверяет код, а другой разработчик предлагает использовать интерфейс для регистрации служб, так как этот подход делает код более гибким и удобным для обслуживания.
Щелкните правой кнопкой мыши проект MyWebApp в области обозревателя . Выберите новую папку. Назовите интерфейсы папок.
Щелкните правой кнопкой мыши папку Interfaces . Выберите новый файл. Назовите файл IWelcomeService.cs.
Замените содержимое IWelcomeService.cs следующим кодом:
namespace MyWebApp.Interfaces public interface IWelcomeService { string GetWelcomeMessage(); }Этот код определяет
IWelcomeServiceинтерфейс с методомGetWelcomeMessage. Все службы, реализующие этот интерфейс, должны предоставлять реализацию дляGetWelcomeMessageметода.Откройте файл Services/WelcomeService.cs.
Добавьте следующую директиву в начало файла.
using MyWebApp.Interfaces;Эта директива разрешает ссылку на интерфейс,
IWelcomeServiceдобавленный на следующем шаге.WelcomeServiceОбновите объявление класса для реализацииIWelcomeServiceинтерфейса:public class WelcomeService : IWelcomeServiceЭто единственное изменение, необходимо внести
WelcomeServiceв класс для реализацииIWelcomeServiceинтерфейса. КлассWelcomeServiceуже имеет метод, соответствующийGetWelcomeMessageсигнатуре метода в интерфейсеIWelcomeService.Откройте файл Program.cs.
builder.Services.AddSingleton<WelcomeService>();Обновите строку до следующего кода:builder.Services.AddSingleton<IWelcomeService, WelcomeService>();Этот код регистрирует
WelcomeServiceкласс в контейнереIWelcomeServiceслужбы с помощью интерфейса.Совет
Подумайте об этом, как говорится: "Когда компонент запрашивает
IWelcomeService, укажите экземплярWelcomeService".app.MapGet("/", (WelcomeService welcomeService) => welcomeService.GetWelcomeMessage());Обновите строку до следующего кода:app.MapGet("/", (IWelcomeService welcomeService) => welcomeService.GetWelcomeMessage());Анонимная функция теперь ожидает
IWelcomeServiceвместо нееWelcomeService.Файл Program.cs должен выглядеть следующим образом:
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();
Тестирование изменений
Давайте протестируем приложение, чтобы убедиться, что он по-прежнему работает должным образом.
- Сохраните все изменения и запустите приложение, как и раньше.
- Когда откроется окно браузера, обратите внимание, что корневой URL-адрес отображает приветственное сообщение, созданное
WelcomeServiceслужбой. - Оставьте приложение запущенным для следующего упражнения.