Класс Program: сборка веб-хоста¶
Приложения ASP.NET Core по сути являются консольными приложениями, поэтому запускаются также: с помощью файла Program.cs со стандартной точкой входа для консольных приложений static void Main.
В приложениях ASP.NET Core метод Main используется для создания и запуска экземпляра IHost — ядра приложения ASP.NET Core, содержащего конфигурацию приложения и сервер Kestrel.
Рассмотрим полный листинг класса Program.cs:
public class Program
{
public static void Main(string[] args) //1
{
CreateHostBuilder(args)
.Build() //2
.Run(); //3
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args) //4
.ConfigureWebHostDefaults(webBuilder => //5
{
webBuilder.UseStartup<Startup>(); //6
});
}
Здесь:
- Создаем
IHostBuilderс помощью методаCreateHostBuilder. - Создаем и возвращаем экземпляр
IHostизIHostBuilder. - Запускаем
IHost, начинаем прослушивать запросы и генерировать ответы. - Создаем
IHostBuilder, используя конфигурацию по умолчанию. - Настраиваем приложение для использования Kestrel и прослушивания HTTP-запросов.
- Класс
Startupопределяет большую часть конфигурации приложения.
Большая часть настройки приложения происходит в IHostBuilder, создаваемом вызовом метода CreateDefaultBuilder, однако часть ответственности делегируется специальному классу Startup, используемому в дженерик-методе UseStartup<Startup>.
Почему существует такое разделение на Program и Startup? Рассмотрим картинку:

Как правило, Program — это место, где настраивается инфраструктура приложения — HTTP-сервер, интеграция с IIS, источники конфигурирования. А Startup — место определения компонентов и функций, используемых приложением, а также конвейера промежуточного ПО (middleware).
Классы Program у разных ASP.NET Core приложений обычно похожи, а вот Startup — могут сильно различаться. На протяжении жизненного цикла приложения Program меняется значительно реже, нежели Startup.
Итак, большая часть настройки нашего приложения происходит в двух методах — CreateDefaultBuilder и ConfigureWebhostDefaults, использующий объект WebHostBuilder для конфигруирования Kestrel.
После завершения настройки вызываем метод Build для создания экземпляра интерфейса IHost, и у него — метод Run, после которого начинается прослушивание HTTP-запросов.
Важно!
В данный момент концепция разделения точки входа на Program.cs и Startup.cs устарела. Начиная с NET6, используется гораздо более лаконичная схема
Дата создания : 19 сентября 2022 г.