Прежде всего, позвольте мне начать с того, что я очень не согласен с вашим утверждением: документация по ASP.NET Core на самом деле очень хорошая. Да, возможно, ему все еще не хватает некоторых деталей, и у него также есть некоторые проблемы, связанные с изменениями в релизах, но в целом контент действительно хорош, и команда, работающая над ним, действительно делает замечательную работу. Действительно сложно написать документацию для такой большой и быстро меняющейся среды, и объем информации, которую вы получаете через документацию, на самом деле очень хороший. Скорее всего, вы поймете, что как только вы преодолеете начальные проблемы, начав с новой платформы.
Но вернемся к вашему вопросу:
IWebHost
: веб-хостинг - это главное, что размещает и запускает ваше веб-приложение. Он создается при запуске приложения, а затем создает все необходимые компоненты, такие как веб-сервер Kestrel, конвейер промежуточного программного обеспечения приложения и все остальные биты, и соединяет их, так что ваше приложение готово обслуживать ваши запросы. .
Веб-хостинг - это в основном то, что составляет ваше веб-приложение.
IWebHostBuilder
: Конструктор веб-хостов - это, по сути, фабрика для создания веб-хостинга. Это то, что создает веб-хост, но также настраивает все необходимые биты, необходимые веб-хосту для определения , как запустить веб-приложение.
В ASP.NET Core 2 вы обычно создаете «компоновщик веб-хостов по умолчанию», который уже будет иметь много настроек по умолчанию. Например, веб-хост по умолчанию настроит веб-сервер Kestrel, включит и настроит ведение журнала и добавит поддержку конфигурации appsettings.json
.
Обычно ваши приложения всегда запускаются с такого веб-хоста по умолчанию, и вы просто используете конструктор веб-хостов для последующей настройки веб-хоста до его фактической сборки.
BuildWebHost
является частью более старого соглашения до ASP.NET Core 2.1, где шаблон по умолчанию в Program.cs
заключался в создании веб-хоста отдельным методом. В версии 2.1 это было изменено так, чтобы метод больше не собирал веб-хоста напрямую, а просто создавал компоновщик веб-хоста (следовательно, метод теперь называется CreateWebHostBuilder
). Таким образом, вызов метода .Build()
для веб-хостинга был реорганизован из метода. Это прекрасно видно в руководстве по миграции для 2.0 на 2.1 .
Причина, по которой это было сделано, состоит в том, чтобы сделать CreateWebHostBuilder
повторно используемым. Конфигурация компоновщика, которая происходит в этом методе, является в основном всем, что необходимо для настройки веб-хостинга. Таким образом, делая его многоразовым, не создавая реально созданный веб-хостинг, его можно использовать для других целей. В этом случае это было сделано для интеграционного тестирования с использованием TestHost
. Тестовый хост в основном будет размещать веб-хост для ваших интеграционных тестов, и он будет делать это путем поиска метода CreateWebHostBuilder
.
В настоящее время шаблон по умолчанию, который вы видите в Program.cs
, начиная с ASP.NET Core 2.1, выглядит следующим образом (комментарии, добавленные мной для дальнейших пояснений):
public class Program
{
// main entry point for your application
public static void Main(string[] args)
{
// create the web host builder
CreateWebHostBuilder(args)
// build the web host
.Build()
// and run the web host, i.e. your web application
.Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
// create a default web host builder, with the default settings and configuration
WebHost.CreateDefaultBuilder(args)
// configure it to use your `Startup` class
.UseStartup<Startup>();
}
Btw. эта тема обычно рассматривается в разделах запуска приложений и хостинга официальной документации.