.Net developer, data scientist
Всем привет. Тема сегодняшнего видео - хост приложения в ASP.NET Core Каждое приложение Asp.Net Core имеет свой хост. Хост – это некоторый объект, который содержит в себе ресурсы приложения. К таким ресурсам можно отнести:
Если вас спросят, какая была цель объединения всех этих ресурсов в одном приложении, то необходимо отметить, что речь идет об упрощенном управлении жизненным циклом приложения: управление стартом приложения и правильным прекращением его работы.
Когда хост начинает свою работу, он вызывает метод StartAsync интерфейса IHostedService на каждой реализации данного интерфейса, которая была зарегистрирована в хосте. В случае веб-приложения одной из реализаций интерфейса IHostedService является веб услуга, которая запускает HTTP сервер.
Для того, чтобы использовать хост его необходимо настроить, построить и запустить. Как правило это происходит в методе Main класса Programm. В этом методе выполняются 3 операции: создается и настраивается объект строителя, который имплементирует интерфейс IHostBuilder; далее на данном объекте вызывается метод Build, то есть мы строим хост; после, так называемой постройки, мы запускаем хост, вызывая метод Run.
Мы можем настроить хост, чтобы он запускался как веб приложение. В этом случае в методе CreateHostBuilder мы вызываем метод ConfigureWebHostDefaults. Но это не единственная возможность. Мы можем запустить приложение ASP.NET Core с классом, который выполняет какую-то определенную бизнес-логику, но никак не связан с веб сервером, запросами и веб услугами. Для этого хост необходимо построить с вызовом метода
ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
В этом случае класс Worker должен реализовывать интерфейс IHostedService.
Во время создания нового приложения ASP.NET Core для постройки хоста в шаблоне добавляются 2 метода: CreateDefaultBuilder и ConfigureWebHostDefaults. Слово Default в названии этих двух методов, которое означает «по умолчанию», нам подсказывает, что эти 2 метода используются для постройки хоста с настройками по умолчанию. Давайте попробуем разобраться какие настройки хоста являются настройками по умолчанию.
Метод CreateDefaultBuilder выполняет следующие действия:
Метод ConfigureWebHostDefaults выполняет следующие действия:
Существует несколько услуг, которые регистрируются фреймворком ASP.NET Core при запуске приложения автоматически:
Услугу IHostApplicationLifetime можно внедрить в любой класс через конструктор данного класса и подписавшись на свойства данной услуги связанные со стартом приложения, остановкой приложения и полной остановкой приложения можно выполнить в текущем классе определенные действия на конкретных этапах работы приложения. Например, что-то инициализировать при старте приложения или наоборот корректно освободить ресурсы приложения при прекращении его работы. Стоит также отметить, что услуга IHostApplicationLifetime имеет также метод для прекращения работы приложения.
Услуга IHostLifetime содержит 2 метода StopAsync и WaitForStartAsync. Я признаюсь не часто пользовался интерфейсом, а если сказать точнее, то вообще им не пользовался. Но я могу сказать, что второй метод WaitForStartAsync используется для отложенного старта приложения – можно отложить старт приложения до наступления определенного события извне.
При помощи услуги IHostEnvironment можно получить информацию о названии приложения, текущей среде приложения и путь к папке с содержимым приложения. Если речь идет об услуге IWebHostEnvironment, то она наследует IHostEnvironment и добавляет еще одно свойство WebRootPath, где можно найти пусть к папке с веб содержимым, речь идет о папке wwwroot.
Конфигурация хоста используется для настройки свойств в классе, которые реализует интерфейс IHostEnvironment. Чтобы добавить конфигурацию хоста, необходимо добавить вызов метода ConfigureHostConfiguration. Этот метод может быть вызван несколько раз и общий результат данных нескольких вызовов будет суммой всех результатов. Если в течение нескольких вызовов одна настройка была установлена несколько раз, то будет использоваться та настройка, которая была настроена последней. В данном методе мы можем выполнить следующие операции:
Если мы настраиваем не веб приложения, а например консольное приложение ASP.Net Core, которое не будет обслуживать запросы HTTP, то вместо метода ConfigureHostConfiguration, можно вызвать метод ConfigureAppConfiguration, который работает аналогично методу ConfigureHostConfiguration.
При настройке хоста все опции настроек можно поделить на 3 группы:
Общие настройки для обоих типов приложений:
Некоторые настройки веб приложений имеют смысл только для приложений, которые обслуживают запросы. Чтобы настроить эти опции можно использовать переменные среды с префиксами DOTNET_ or ASPNETCORE_. Также для эти настроек доступы методы расширений на объекте IWebHostBuilder. Официальная документация Microsoft перечисляет 10 таких опций. Так как тема нашего видео урока «Хост приложения ASP.NET» и наш видео урок обзорный, что не подразумевает детальное рассмотрение всех аспектов данной темы, то я позволю себе не рассматривать сейчас эти опции. Я просто оставлю их список в описании к видео и, если Вам будет интересно, вы самостоятельно сможете проверить на что данные опции влияют. Список опций настроек для веб – приложения:
Для управления жизненным циклом приложения можно вызывать на объекте класса, который реализует интерфейс IHost методы для старта и окончания работы приложения. Также есть ряд методов расширений для объектов типа IHost. Все эти методы можно поделить на 3 группы:
Надеюсь, что это видео было для вас интересным и полезным. Если это так, то буду благодарен за лайк и подписку, если вы еще не подписаны. Я не специалист в продвижении канала на youtube, но я слышал, что лайки и подписки помогают в продвижении. Также я слышал, что положительные комментарии помогают продвижении канала, а если это так, то я буду благодарен за такие комментарии под данным видео. Более того, чем интенсивнее канал развивается, тем более высока моя мотивация продолжать создавать данные видео. Спасибо за внимание и до новых встреч.
Пример кода из видео на GitHub
Для открытия файла проекта необходимо Visual Studio 2019.