ASP.NET Core/Program.cs: различия между версиями

Материал из DZWIKI
Перейти к навигации Перейти к поиску
Строка 88: Строка 88:
=== Класс WebApplication ===
=== Класс WebApplication ===


Метод '''build()''' класса <code>WebApplicationBuilder</code> создает объект '''WebApplication''':
Метод '''build()''' класса <code>WebApplicationBuilder</code> создает объект '''WebApplication'''<ref>{{cite web
|url          = https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs
|title        = Исходный код WebApplication.cs
|lang        = en
|access-date  = 2022-11-28
|website      = [[GitHub]]
}}</ref>:


<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
WebApplication app = builder.Build();
WebApplication app = builder.Build();
</syntaxhighlight>
Класс WebApplication применяется для управления обработкой запроса, установки маршрутов, получения сервисов и т.д..
Класс WebApplication применяет три интерфейса:
* IHost: применяется для запуска и остановки хоста, который прослушивает входящие запросы
* IApplicationBuilder: применяется для установки компонентов, которые участвуют в обработке запроса
* IEndpointRouteBuilder: применяется для установки маршрутов, которые сопоставляются с запросами
Для получения доступа к функциональности приложения можно использовать свойства класса WebApplication:
* Configuration: представляет конфигурацию приложения в виде объекта IConfiguration
* Environment: представляет окружение приложения в виде IWebHostEnvironment
* Lifetime: позволяет получать уведомления о событиях жизненного цикла приложения
* Logger: представляет логгер приложения по умолчанию
* Services: представляет сервисы приложения
* Urls: представляет набор адресов, которые использует сервер
Для управления хостом класс WebApplication определяет следующие методы:
* Run(): запускает приложение
* RunAsync(): асинхронно запускает приложение
* Start(): запускает приложение
* StartAsync(): запускает приложение
* StopAsync(): останавливает приложение
Таким образом, после вызова метод Run/Start/RunAsync/StartAsync приложение будет запущено, и мы сможем к нему обращаться:
<syntaxhighlight lang="csharp">
WebApplicationBuilder builder = WebApplication.CreateBuilder();
WebApplication app = builder.Build();
app.Run();
</syntaxhighlight>
</syntaxhighlight>



Версия от 06:17, 28 ноября 2022

Program.cs и класс Startup в ASP.NET Core проекте.

Program.cs

Program.cs — это место, с которого начинается приложение. Файл Program.cs в ASP.NET Core работает так же, как файл Program.cs в традиционном консольном приложении .NET Framework. Файл Program.cs является точкой входа в приложение, IISIntegration и создания хоста с помощью инстанса IWebHostBuilder, метода Main.

До ASP.NET Core 6, в котором была применена новая модель минимального размещения, файл Program.cs отвечает за регистрацию и заполнение Startup.cs.

Program.cs в ASP.NET Core 7
Стандартная модель Модель минимального размещения
namespace WebApp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);
            var app = builder.Build();

            app.MapGet("/", () => "Hello World!");
			
            app.Run();
        }
    }
}
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Приложение в ASP.NET Core представляет объект Microsoft.AspNetCore.Builder.WebApplication. Этот объект настраивает всю конфигурацию приложения, его маршруты, используемые зависимости и т.д..

Класс WebApplicationBuilder

Для создания объекта WebApplication необходим специальный класс-строитель - WebApplicationBuilder[1]. В файле Program.cs вначале создается данный объект с помощью статического метода WebApplication.CreateBuilder, так:

var builder = WebApplication.CreateBuilder(args);

В качестве параметра в метод передаются аргументы, которые передаются приложению при запуске (доступны через неявно определенный параметр args)

WebApplicationBuilder builder = WebApplication.CreateBuilder(args);

Либо можно передавать объект WebApplicationOption:

WebApplicationOptions options = new() { Args = args };
WebApplicationBuilder builder = WebApplication.CreateBuilder(options);

Кроме создания объекта WebApplication класс WebApplicationBuilder выполняет еще ряд задач, среди которых можно выделить следующие:

  • Установка конфигурации приложения
  • Добавление сервисов
  • Настройка логгирования в приложении
  • Установка окружения приложения
  • Конфигурация объектов IHostBuilder и IWebHostBuilder, которые применяются для создания хоста приложения

Для реализации этих задач в классе WebApplicationBuilder определены следующие свойства:

  • Configuration: представляет объект ConfigurationManager, который применяется для добавления конфигурации к приложению.
  • Environment: предоставляет информацию об окружении, в котором запущено приложение.
  • Host: объект IHostBuilder, который применяется для настройки хоста.
  • Logging: позволяет определить настройки логгирования в приложении.
  • Services: представляет коллекцию сервисов и позволяет добавлять сервисы в приложение.
  • WebHost: объект IWebHostBuilder, который позволяет настроить отдельные настройки сервера.

Класс WebApplication

Метод build() класса WebApplicationBuilder создает объект WebApplication[2]:

WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
WebApplication app = builder.Build();

Класс WebApplication применяется для управления обработкой запроса, установки маршрутов, получения сервисов и т.д..

Класс WebApplication применяет три интерфейса:

  • IHost: применяется для запуска и остановки хоста, который прослушивает входящие запросы
  • IApplicationBuilder: применяется для установки компонентов, которые участвуют в обработке запроса
  • IEndpointRouteBuilder: применяется для установки маршрутов, которые сопоставляются с запросами

Для получения доступа к функциональности приложения можно использовать свойства класса WebApplication:

  • Configuration: представляет конфигурацию приложения в виде объекта IConfiguration
  • Environment: представляет окружение приложения в виде IWebHostEnvironment
  • Lifetime: позволяет получать уведомления о событиях жизненного цикла приложения
  • Logger: представляет логгер приложения по умолчанию
  • Services: представляет сервисы приложения
  • Urls: представляет набор адресов, которые использует сервер

Для управления хостом класс WebApplication определяет следующие методы:

  • Run(): запускает приложение
  • RunAsync(): асинхронно запускает приложение
  • Start(): запускает приложение
  • StartAsync(): запускает приложение
  • StopAsync(): останавливает приложение

Таким образом, после вызова метод Run/Start/RunAsync/StartAsync приложение будет запущено, и мы сможем к нему обращаться:

WebApplicationBuilder builder = WebApplication.CreateBuilder();
WebApplication app = builder.Build();
app.Run();

Файл Startup.cs и класс Startup

В ASP.NET Core 6 класс Startup упразднили.

Пустой шаблон для ASP.NET Core 6, создает приложение с помощью новой модели минимального размещения[3]. Вместе с тем использование Startup и универсальный узел[4], используемый шаблонами ASP.NET Core 3.1 и 5.0, полностью поддерживается.

Файл Startup.cs — это точка входа в приложение, аналог Global.asax в классическом ASP.NET и он будет вызываться после выполнения файла Program.cs на уровне приложения[5]. Этот класс производит конфигурацию приложения, настраивает сервисы, которые приложение будет использовать, устанавливает компоненты для обработки запроса или middleware и обрабатывает конвейер запросов. Класс Startup запускается в момент запуска приложения.

Примечания

  1. Исходный код WebApplicationBuilder.cs (англ.). GitHub. Дата обращения: 28 ноября 2022.
  2. Исходный код WebApplication.cs (англ.). GitHub. Дата обращения: 28 ноября 2022.
  3. Переход с ASP.NET Core 5.0 на 6.0: Новая модель размещения. Документация к ASP.NET Core (30 сентября 2022). Дата обращения: 28 ноября 2022. Архивировано 28 ноября 2022 года.
  4. Универсальный узел .NET в ASP.NET Core. Microsoft Learn: Документация к ASP.NET Core 7.0 (30 сентября 2022). Дата обращения: 28 ноября 2022. Архивировано 28 ноября 2022 года.
  5. Что из себя представляет класс Startup и Program.cs в ASP.NET Core. Хабрахабр (15 февраля 2021). Дата обращения: 27 ноября 2022. Архивировано 22 сентября 2022 года.

Ссылки и источники