Демистификация классов Program и Startup в ASP.NET Core

автор vadim


ASP.NET Core 6 представляет упрощенную модель размещения, которая сокращает количество шаблонного кода, который в противном случае пришлось бы писать для запуска и запуска приложения ASP.NET Core. Классы Program и Startup — это два основных класса, в которых вы обычно пишете код для настройки приложения.

В этой статье рассказывается о том, как настроить классы запуска приложений в ASP.NET Core 6, с соответствующими примерами кода, где это необходимо.

Для работы с примерами кода, представленными в этой статье, в вашей системе должна быть установлена ​​Visual Studio 2022. Если у вас еще нет копии, вы можете скачать Visual Studio 2022 здесь.

Создайте проект веб-API ASP.NET Core в Visual Studio 2022.

Прежде всего давайте создадим проект ASP.NET Core в Visual Studio 2022. Выполнение этих шагов позволит создать новый проект ASP.NET Core Web API 6 в Visual Studio 2022:

  1. Запустите интегрированную среду разработки Visual Studio 2022.
  2. Нажмите «Создать новый проект».
  3. В окне «Создать новый проект» выберите «ASP.NET Core Web API» из списка отображаемых шаблонов.
  4. Нажмите “Далее.
  5. В окне «Настроить новый проект» укажите имя и местоположение нового проекта.
  6. При желании установите флажок «Поместить решение и проект в один каталог», в зависимости от ваших предпочтений.
  7. Нажмите “Далее.
  8. В показанном ниже окне «Дополнительная информация» выберите .NET 6.0 в качестве целевой платформы из раскрывающегося списка вверху. В поле «Тип аутентификации» оставьте значение «Нет» (по умолчанию).
  9. Убедитесь, что флажки «Включить Docker», «Настроить HTTPS» и «Включить поддержку Open API» сняты, поскольку мы не будем здесь использовать ни одну из этих функций.
  10. Нажмите Создать.

В результате будет создан новый проект веб-API ASP.NET Core 6 в Visual Studio 2022. Мы будем использовать этот проект в последующих разделах этой статьи.

Что такое хост в .NET и .NET Core?

Веб-приложение .NET или .NET Core выполняется внутри узла, который обрабатывает запуск приложения, настройку веб-сервера и т. д. Узел инкапсулирует такие ресурсы, как ведение журнала, настройка, внедрение зависимостей (DI) и любые реализации IHostedService. Хост создается, настраивается и выполняется с использованием кода, написанного в классе Program.

Чтобы создать узел в ASP.NET Core 6, необходимо вызвать метод Build().Run() в построителе узла. Построитель хостов — это экземпляр IHostBuilder. Следующий фрагмент кода иллюстрирует это:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.Run();

Класс WebApplication реализует следующие интерфейсы:

  • IHost – используется для запуска и остановки хоста
  • IApplicationBuilder — используется для построения конвейера промежуточного программного обеспечения.
  • IEndpointRouteBuilder – используется для добавления конечных точек.

Вы также можете вызвать метод CreateDefaultBuilder для создания узла. Этот метод используется для инициализации нового экземпляра класса WebHostBuilder с предварительно настроенными значениями по умолчанию.

В следующем фрагменте кода показано, как можно использовать метод CreateDefaultBuilder:

var host = new WebHostBuilder()
      .UseKestrel()
      .UseContentRoot(Directory.GetCurrentDirectory())
      .UseIISIntegration()
      .UseStartup<Startup>()
      .Build();

Обратите внимание, что классы WebApplication и WebApplicationBuilder были представлены в ASP.NET Core 6.

Метод расширения ConfigurationWebHostDefaults() можно использовать для настройки узла веб-приложения, выбрав Kestrel в качестве веб-сервера и настроив его с помощью поставщиков конфигурации хостинга приложения.

Класс Program в .NET и .NET Core

Для запуска проекта .NET или .NET Core требуется точка входа. Метод Main() — это точка входа в приложение .NET или .NET Core. Поскольку Main() является точкой входа вашего приложения, в вашем проекте может быть один и только один метод Main(). Хотя вы можете разместить Main() в любом месте вашего проекта, обычно он находится в классе Program, хранящемся в файле Program.cs.

Класс Program в ASP.NET Core 5.

Вот как будет выглядеть минимальный класс Program в .NET 5:

public class Program
{
      public static void Main(string[] args) {
            CreateHostBuilder(args).Build().Run();
      }
      public static IHostBuilder CreateHostBuilder(string[] args) {
            return Host.CreateDefaultBuilder(args).
            ConfigureWebHostDefaults(x => x.UseStartup <Startup> ());
      }
}

Класс программы в ASP.NET Core 6

Когда вы создаете новый проект веб-API в ASP.NET Core 6, у вас будет файл Program.cs. Однако, в отличие от ASP.NET Core 5 (и всех предыдущих версий ASP.NET Core), проект не создает файл Startup.cs. Сгенерированный по умолчанию код класса Program в ASP.NET Core 6 будет выглядеть следующим образом:

var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseAuthorization();
app.MapControllers();
app.Run();

Класс Startup в .NET и .NET Core

Класс Startup содержит методы ConfigurationServices и Configure. Первый используется для настройки необходимых служб, второй — для настройки конвейера обработки запросов.

Метод Configure выполняется сразу после метода ConfigurationServices. Оба эти метода вызываются средой выполнения при запуске приложения. Во время выполнения хост .NET передает экземпляр IApplicationBuilder методу Configure. По умолчанию ConfigurationServices добавляет службы во встроенный контейнер.

Следующий листинг кода иллюстрирует организацию класса Startup:

public class Startup
  {
        public void ConfigureServices(IServiceCollection services)
        {
            //Write code to add services to the container here
        }
        public void Configure(IApplicationBuilder app)
        {
         //Write code here to configure the request processing pipeline
        }
      //Other members have been removed for brevity
   }

У вас также будет конструктор в классе Startup, который будет использоваться для инициализации экземпляра IConfiguration, как показано в листинге кода в следующем разделе.

Используйте класс Startup в ASP.NET Core 6.

Хотя класс Startup не создается по умолчанию в ASP.NET Core 6, вы можете использовать класс Startup в ASP.NET Core 6, если хотите. Для этого вам следует создать класс с именем Startup (вы также можете указать любое другое имя) и ввести методы ConfigurationServices и Настройка, как показано ниже.

  public class Startup
  {
        public Startup(IConfigurationRoot configuration)
        {
            Configuration = configuration;
        }
        public IConfigurationRoot Configuration { get; }
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
        }
        public void Configure(IApplicationBuilder app)
        {
            app.UseRouting();
            app.UseEndpoints(x => x.MapControllers());
        }
   }

Методы UseRouting и UseEndpoints используются для добавления и настройки промежуточного программного обеспечения маршрутизации в конвейер обработки запросов. Код класса вашей программы должен ссылаться на вновь созданный класс запуска. Для этого замените существующий код класса Program следующим кодом:

var builder = WebApplication.CreateBuilder(args);
var startup = new Startup(builder.Configuration);
startup.ConfigureServices(builder.Services);
var app = builder.Build();
startup.Configure(app);
app.Run();

Теперь установите точку останова в методах ConfigurationServices и Configure класса Startup, который мы создали ранее. Вы заметите, что точки останова срабатывают при запуске приложения.

Новая минимальная модель хостинга в ASP.NET Core 6 позволяет вам писать меньше шаблонного кода для запуска и работы вашего приложения. Для обеспечения обратной совместимости вы по-прежнему можете использовать класс Startup в ASP.NET Core 6. Подробнее о минимальной модели хостинга можно прочитать в моей предыдущей статье здесь.

Related Posts

Оставить комментарий