Я буду работать в Visual Studio 19. Для начала работы нам нужны:
Сам ASP.NET и Кроссплатформенная разработка для .NET
Для нашего стартого приложения выберем
Запустив проект получим
В обозревателе решений можем увидеть Иерархию нашего проекта
Давайте разберем класс программ.
В программе по умолчанию в статическом методе CreateHostBuilder как раз создается и настраивается IHostBuilder. Непосредственно создание IHostBuilder производится с помощью метода Host.CreateDefaultBuilder(args).
Данный метод выполняет ряд задач.
- Устанавливает корневой каталог (для этого используется свойство Directory.GetCurrentDirectory). Корневой каталог представляет папку, где будет производиться поиск различного содержимого, например, представлений.
- Устанавливает конфигурацию хоста. Для этого загружаются переменные среды с префиксом "DOTNET_" и аргументы командной строки
- Устанавливает конфигурацию приложения. Для этого загружается содержимое из файлов appsettings.json и appsettings.{Environment}.json, а также переменные среды и аргументы командной строки. Если приложение в статусе разработки, то также используются данные Secret Manager (менеджера секретов), который позволяет сохранить конфиденциальные данные, используемые при разработке.
- Добавляет провайдеры логирования
- Если проект в статусе разработки, то также обеспечивает валидацию сервисов
Далее вызывается метод ConfigureWebHostDefaults(). Этот метод призван выполнять конфигурацию параметров хоста, а именно:
- Загружает конфигурацию из переменных среды с префиксом "ASPNETCORE_"
- Запускает и настраивает веб-сервер Kestrel, в рамках которого будет разворачиваться приложение
- Добавляет компонент Host Filtering, который позволяет настраивать адреса для веб-сервера Kestrel
- Если переменная окружения ASPNETCORE_FORWARDEDHEADERS_ENABLED равна true, добавляет компонент Forwarded Headers, который позволяет считывать из запроса заголовки "X-Forwarded-"
- Если для работы приложения требуется IIS, то данный метод также обеспечивает интеграцию с IIS
Метод ConfigureWebHostDefaults() в качестве параметра принимает делегат Action<IWebHostBuilder&. А помощью последовательного вызова цепочки методов у объекта IWebHostBuilder производится инициализация веб-сервера для развертывания веб-приложения.
Этим вызовом устанавливается стартовый класс приложения - класс Startup, с которого и будет начинаться обработка входящих запросов.
В методе Main вызывается метод у созданного объекта IHostBuilder вызывается метод Build(), который собственно создает хост - объект IHost, в рамках которого развертывается веб-приложение. Запуск у IHost вызывается метод Run():
CreateHostBuilder(args).Build().Run();
После этого приложение запущено, и веб-сервер начинает прослушивать все входящие HTTP-запросы.
Если возникли вопросы, буду рад обсудить их в комментариях! ;)