"commandName": "Project",
"launchBrowser": true,
"launchUrl": "api/values",
"applicationUrl": "https://localhost:5021;http://localhost:5020",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
Создание и конфигурирование экземпляра WebHost
В отличие от классических приложений ASP.NET MVC или ASP.NET Web API приложения ASP.NET Core — это просто консольные приложения .NET Core, которые создают и конфигурируют экземпляр WebHost. Создание экземпляра WebHost и его последующее конфигурирование обеспечивают настройку приложения на прослушивание (и реагирование) на запросы HTTP. Экземпляр WebHost создается в методе Main внутри файла Program.cs. Затем экземпляр WebHost конфигурируется для вашего приложения в файле Startup.cs.
Файл Program.cs
Откройте файл класса Program.cs в приложении AutoLot.Api и просмотрите его содержимое, которое для справки приведено ниже:
namespace AutoLot.Api
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build.Run;
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup
});
}
}
Метод CreateDefaultBuilder ужимает наиболее типовую настройку приложения в один вызов. Он конфигурирует приложение (используя переменные среды и JSON-файлы appsettings), настраивает стандартный поставщик ведения журнала и устанавливает контейнер DI. Такая настройка обеспечивается шаблонами ASP.NET Core для приложений API и MVC.
Следующий метод, ConfigureWebHostDefaults, тоже является мета-методом, который добавляет поддержку для Kestrel, IIS и дополнительные настройки. Финальный шаг представляет собой установку класса конфигурации, специфичной для приложения, который в данном примере (и по соглашению) называется Startup. Наконец, вызывается метод Run для активизации экземпляра WebHost.
Помимо экземпляра WebHost в предыдущем коде создается экземпляр реализации IConfiguration, который добавляется внутрь контейнера DI.
Файл Startup.cs
Класс Startup конфигурирует то, как приложение будет обрабатывать запросы и ответы HTTP, настраивает необходимые службы и добавляет службы в контейнер DI. Имя класса может быть любым, если оно соответствует строке UseStartup в конфигурации метода CreateHostBuilder, но по соглашению класс именуется как Startup.
Доступные службы для класса Startup
Процессу запуска требуется доступ к инфраструктуре, а также к службам и настройкам среды, которые внедряются в класс инфраструктурой. Классу Startup доступно пять служб для конфигурирования приложения, которые кратко описаны в табл. 29.11.
Конструктор принимает экземпляр реализации IConfiguration и необязательный экземпляр реализации IWebHostEnvironment/IHostEnvironment. Метод ConfigureServices запускается до того, как метод Configure получает экземпляр реализации IServiceCollection. Метод Configure должен принимать экземпляр реализации IApplicationBuilder, но может принимать экземпляры реализаций IWebHostEnvironment/IHostEnvironment, ILoggerFactory и любых интерфейсов, которые были добавлены внутрь контейнера DI в методе ConfigureServices. Все перечисленные компоненты обсуждаются в последующих разделах.
Конструктор
Конструктор принимает экземпляр реализации интерфейса IConfiguration, который был создан методом Host.CreateDefaultBuilder в файле класса Program.cs, и присваивает его свойству Configuration для использования где-то в другом месте внутри класса. Конструктор также может принимать экземпляр реализации IWebHostEnvironment и/или ILoggerFactory, хотя он не добавляется в стандартном шаблоне.
Добавьте в конструктор параметр для IWebHostEnvironment и присвойте его локальной переменной уровня класса. Это понадобится в методе ConfigureServices. Проделайте такую же работу для приложений AutoLot.Api и AutoLot.Mvc.
private readonly IWebHostEnvironment _env;
public Startup(