"commandName": "Project",

  "launchBrowser": true,

  "launchUrl": "api/values",

  "applicationUrl": "https://localhost:5021;http://localhost:5020",

  "environmentVariables": {

  "ASPNETCORE_ENVIRONMENT": "Development"

  }

}

<p id="AutBody_Root1384"><strong>Создание и конфигурирование экземпляра WebHost</strong></p>

В отличие от классических приложений ASP.NET MVC или ASP.NET Web API приложения ASP.NET Core — это просто консольные приложения .NET Core, которые создают и конфигурируют экземпляр WebHost. Создание экземпляра WebHost и его последующее конфигурирование обеспечивают настройку приложения на прослушивание (и реагирование) на запросы HTTP. Экземпляр WebHost создается в методе Main внутри файла Program.cs. Затем экземпляр WebHost конфигурируется для вашего приложения в файле Startup.cs.

<p id="AutBody_Root1385"><strong>Файл Program.cs</strong></p>

Откройте файл класса 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.

<p id="AutBody_Root1386"><strong>Файл Startup.cs</strong></p>

Класс Startup конфигурирует то, как приложение будет обрабатывать запросы и ответы HTTP, настраивает необходимые службы и добавляет службы в контейнер DI. Имя класса может быть любым, если оно соответствует строке UseStartup в конфигурации метода CreateHostBuilder, но по соглашению класс именуется как Startup.

<p id="AutBody_Root1387"><strong>Доступные службы для класса Startup</strong></p>

Процессу запуска требуется доступ к инфраструктуре, а также к службам и настройкам среды, которые внедряются в класс инфраструктурой. Классу Startup доступно пять служб для конфигурирования приложения, которые кратко описаны в табл. 29.11.

Конструктор принимает экземпляр реализации IConfiguration и необязательный экземпляр реализации IWebHostEnvironment/IHostEnvironment. Метод ConfigureServices запускается до того, как метод Configure получает экземпляр реализации IServiceCollection. Метод Configure должен принимать экземпляр реализации IApplicationBuilder, но может принимать экземпляры реализаций IWebHostEnvironment/IHostEnvironment, ILoggerFactory и любых интерфейсов, которые были добавлены внутрь контейнера DI в методе ConfigureServices. Все перечисленные компоненты обсуждаются в последующих разделах.

<p id="AutBody_Root1388"><strong>Конструктор</strong></p>

Конструктор принимает экземпляр реализации интерфейса IConfiguration, который был создан методом Host.CreateDefaultBuilder в файле класса Program.cs, и присваивает его свойству Configuration для использования где-то в другом месте внутри класса. Конструктор также может принимать экземпляр реализации IWebHostEnvironment и/или ILoggerFactory, хотя он не добавляется в стандартном шаблоне.

Добавьте в конструктор параметр для IWebHostEnvironment и присвойте его локальной переменной уровня класса. Это понадобится в методе ConfigureServices. Проделайте такую же работу для приложений AutoLot.Api и AutoLot.Mvc.

private readonly IWebHostEnvironment _env;

public Startup(

Перейти на страницу:

Похожие книги