Упражнение. Регистрация и использование служб

Завершено

ASP.NET Приложения Core часто имеют доступ к тем же службам в нескольких компонентах. ASP.NET Core использует встроенный контейнер внедрения зависимостей для управления службами, которые использует приложение.

Ваша команда ведет задачи по созданию веб-сайта barebones для вашей компании. Веб-сайт должен отображать приветственное сообщение на главной странице. Вы решили создать службу, чтобы создать приветственное сообщение. Затем вы зарегистрируете службу в контейнере службы, чтобы его можно было внедрить в компоненты, необходимые для него.

Создание приложения ASP.NET Core

Вам потребуется приложение ASP.NET Core, чтобы играть роль приложения вашей команды. Давайте создадим новое приложение ASP.NET Core с помощью расширения набора средств разработки на C# в Visual Studio Code.

  1. Запустите Visual Studio Code.

  2. Нажмите клавиши CTRL+SHIFT+P , чтобы открыть палитру команд.

  3. Найдите и выберите .NET: Создать проект....

  4. Найдите и выберите ASP.NET Core Empty.

    Снимок экрана палитры команд с выбранным ASP.NET Core Empty.

  5. Выберите или создайте папку для нового проекта.

  6. Назовите новое приложение MyWebApp.

  7. Выберите Создать проект, и проект будет создан.

  8. Когда откроется новый проект, разверните Solution Explorer панель для просмотра файлов проекта.

    Снимок экрана: панель Обозреватель решений в Visual Studio Code.

Выполнить приложение

Протестируйте приложение, чтобы убедиться, что он выполняется.

  1. В Visual Studio Code нажмите клавишу F5 , чтобы создать и запустить приложение.

    1. При появлении запроса выберите C# в качестве отладчика.
    2. При появлении запроса выберите C#: MyWebApp [Конфигурация по умолчанию] в качестве используемой конфигурации запуска.

    Эта команда запускает приложение и размещает его на локальном веб-сервере. Откроется окно браузера и отображается сообщение "Hello, World!"

  2. Закройте окно браузера и остановите приложение, нажав клавиши SHIFT+F5 в Visual Studio Code.

Создание сервиса

Теперь, когда у вас есть рабочее приложение, давайте создадим службу, которая создает приветственное сообщение для главной страницы.

  1. Щелкните правой кнопкой мыши проект MyWebApp в области обозревателя . Выберите новую папку. Присвойте этой папке имя Services.

  2. Щелкните правой кнопкой мыши папку "Службы ". Выберите новый файл. Назовите файл WelcomeService.cs.

  3. Замените содержимое 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 они никогда не изменяются в течение всего времени существования экземпляра службы.

Регистрация службы

Теперь, когда у вас есть служба, необходимо зарегистрировать ее в контейнере службы.

  1. Откройте файл Program.cs.

  2. Добавьте следующую директиву в начало файла.

    using MyWebApp.Services;
    

    Эта директива разрешает ссылку на WelcomeService класс.

  3. Сразу после var builder = WebApplication.CreateBuilder(args); строки добавьте следующий код:

    builder.Services.AddSingleton<WelcomeService>();
    

    WebApplication.CreateBuilder создает новый экземпляр вызываемого WebApplicationBuilderbuilderкласса. Предыдущий код регистрирует WelcomeService класс в контейнере службы с одним временем существования.

  4. Измените строку на 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();
    

Тестирование изменений

  1. Сохраните все изменения и запустите приложение, как и раньше.
  2. Когда откроется окно браузера, обратите внимание, что корневой URL-адрес отображает приветственное сообщение, созданное WelcomeService службой.
  3. Закройте окно браузера и остановите приложение, нажав клавиши SHIFT+F5 в Visual Studio Code.

Использование интерфейса

Ваша команда проверяет код, а другой разработчик предлагает использовать интерфейс для регистрации служб, так как этот подход делает код более гибким и удобным для обслуживания.

  1. Щелкните правой кнопкой мыши проект MyWebApp в области обозревателя . Выберите новую папку. Назовите интерфейсы папок.

  2. Щелкните правой кнопкой мыши папку Interfaces . Выберите новый файл. Назовите файл IWelcomeService.cs.

  3. Замените содержимое IWelcomeService.cs следующим кодом:

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

    Этот код определяет IWelcomeService интерфейс с методом GetWelcomeMessage . Все службы, реализующие этот интерфейс, должны предоставлять реализацию для GetWelcomeMessage метода.

  4. Откройте файл Services/WelcomeService.cs.

  5. Добавьте следующую директиву в начало файла.

    using MyWebApp.Interfaces;
    

    Эта директива разрешает ссылку на интерфейс, IWelcomeService добавленный на следующем шаге.

  6. WelcomeService Обновите объявление класса для реализации IWelcomeService интерфейса:

    public class WelcomeService : IWelcomeService
    

    Это единственное изменение, необходимо внести WelcomeService в класс для реализации IWelcomeService интерфейса. Класс WelcomeService уже имеет метод, соответствующий GetWelcomeMessage сигнатуре метода в интерфейсе IWelcomeService .

  7. Откройте файл Program.cs.

  8. builder.Services.AddSingleton<WelcomeService>(); Обновите строку до следующего кода:

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

    Этот код регистрирует WelcomeService класс в контейнере IWelcomeService службы с помощью интерфейса.

    Совет

    Подумайте об этом, как говорится: "Когда компонент запрашивает IWelcomeService, укажите экземпляр WelcomeService".

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

Тестирование изменений

Давайте протестируем приложение, чтобы убедиться, что он по-прежнему работает должным образом.

  1. Сохраните все изменения и запустите приложение, как и раньше.
  2. Когда откроется окно браузера, обратите внимание, что корневой URL-адрес отображает приветственное сообщение, созданное WelcomeService службой.
  3. Оставьте приложение запущенным для следующего упражнения.