ASP.NET Core/Program.cs: различия между версиями
Dzmuh (обсуждение | вклад) |
Dzmuh (обсуждение | вклад) |
||
| (не показано 7 промежуточных версий этого же участника) | |||
| Строка 39: | Строка 39: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |} | ||
Приложение в ASP.NET Core представляет объект <code>Microsoft.AspNetCore.Builder.WebApplication</code>. Этот объект настраивает всю конфигурацию приложения, его маршруты, используемые зависимости и т.д.. | |||
=== Класс WebApplicationBuilder === | |||
Для создания объекта '''WebApplication'''<ref>{{cite web | |||
|url = https://metanit.com/sharp/aspnet6/2.1.php | |||
|title = Основы в ASP.NET Core. Создание и запуск приложения. WebApplication и WebApplicationBuilder. | |||
|lang = ru | |||
|date = 2021-12-06 | |||
|access-date = 2022-11-28 | |||
|website = METANIT | |||
|archive-url = https://web.archive.org/web/20221004092019/https://metanit.com/sharp/aspnet6/2.1.php | |||
|archive-date = 2022-10-04 | |||
}}</ref> необходим специальный класс-строитель - <code>WebApplicationBuilder</code><ref>{{cite web | |||
|url = https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs | |||
|title = Исходный код WebApplicationBuilder.cs | |||
|lang = en | |||
|access-date = 2022-11-28 | |||
|website = [[GitHub]] | |||
}}</ref>. В файле <code>Program.cs</code> вначале создается данный объект с помощью статического метода <code>WebApplication.CreateBuilder</code>, так: | |||
<syntaxhighlight lang="csharp"> | |||
var builder = WebApplication.CreateBuilder(args); | |||
</syntaxhighlight> | |||
В качестве параметра в метод передаются аргументы, которые передаются приложению при запуске (доступны через неявно определенный параметр <code>args</code>) | |||
<syntaxhighlight lang="csharp"> | |||
WebApplicationBuilder builder = WebApplication.CreateBuilder(args); | |||
</syntaxhighlight> | |||
Либо можно передавать объект <code>WebApplicationOption</code>: | |||
<syntaxhighlight lang="csharp"> | |||
WebApplicationOptions options = new() { Args = args }; | |||
WebApplicationBuilder builder = WebApplication.CreateBuilder(options); | |||
</syntaxhighlight> | |||
Кроме создания объекта <code>WebApplication</code> класс <code>WebApplicationBuilder</code> выполняет еще ряд задач, среди которых можно выделить следующие: | |||
* Установка конфигурации приложения | |||
* Добавление сервисов | |||
* Настройка логгирования в приложении | |||
* Установка окружения приложения | |||
* Конфигурация объектов <code>IHostBuilder</code> и <code>IWebHostBuilder</code>, которые применяются для создания хоста приложения | |||
Для реализации этих задач в классе <code>WebApplicationBuilder</code> определены следующие свойства: | |||
* '''Configuration''': представляет объект <code>ConfigurationManager</code>, который применяется для добавления конфигурации к приложению. | |||
* '''Environment''': предоставляет информацию об окружении, в котором запущено приложение. | |||
* '''Host''': объект <code>IHostBuilder</code>, который применяется для настройки хоста. | |||
* '''Logging''': позволяет определить настройки логгирования в приложении. | |||
* '''Services''': представляет коллекцию сервисов и позволяет добавлять сервисы в приложение. | |||
* '''WebHost''': объект <code>IWebHostBuilder</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"> | |||
WebApplicationBuilder builder = WebApplication.CreateBuilder(args); | |||
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> | |||
При необходимости с помощью метода StopAsync() можно программным способом завершить выполнение приложения: | |||
<syntaxhighlight lang="csharp"> | |||
WebApplicationBuilder builder = WebApplication.CreateBuilder(); | |||
WebApplication app = builder.Build(); | |||
app.MapGet("/", () => "Hello World!"); | |||
await app.StartAsync(); | |||
await Task.Delay(10000); | |||
await app.StopAsync(); // через 10 секунд завершаем выполнение приложения | |||
</syntaxhighlight> | |||
== Файл <code>Startup.cs</code> и класс <code>Startup</code> == | == Файл <code>Startup.cs</code> и класс <code>Startup</code> == | ||
| Строка 65: | Строка 182: | ||
}}</ref>, используемый шаблонами ASP.NET Core 3.1 и 5.0, полностью поддерживается. | }}</ref>, используемый шаблонами ASP.NET Core 3.1 и 5.0, полностью поддерживается. | ||
{{Конец коробки}} | {{Конец коробки}} | ||
Файл <code>Startup.cs</code> — это точка входа в приложение, аналог <code>Global.asax</code> в классическом [[ASP.NET]] и он будет вызываться после выполнения файла <code>Program.cs</code> на уровне приложения<ref>{{cite web | Файл <code>Startup.cs</code> — это точка входа в приложение<ref>{{cite web | ||
|url = https://metanit.com/sharp/aspnet5/2.1.php | |||
|title = Класс Startup | |||
|lang = ru | |||
|date = 2019-10-30 | |||
|access-date = 2022-11-28 | |||
|website = METANIT | |||
|archive-url = https://web.archive.org/web/20220525002721/https://metanit.com/sharp/aspnet5/2.1.php | |||
|archive-date = 2022-05-25 | |||
}}</ref>, аналог <code>Global.asax</code> в классическом [[ASP.NET]] и он будет вызываться после выполнения файла <code>Program.cs</code> на уровне приложения<ref>{{cite web | |||
|url = https://habr.com/ru/company/otus/blog/542494/ | |url = https://habr.com/ru/company/otus/blog/542494/ | ||
|title = Что из себя представляет класс Startup и Program.cs в ASP.NET Core | |title = Что из себя представляет класс Startup и Program.cs в ASP.NET Core | ||
| Строка 81: | Строка 207: | ||
== Ссылки и источники == | == Ссылки и источники == | ||
[[Категория: | [[Категория:Документация к ASP.NET Core]] | ||
Текущая версия от 00:09, 1 декабря 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.
| Стандартная модель | Модель минимального размещения |
|---|---|
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[1] необходим специальный класс-строитель - WebApplicationBuilder[2]. В файле 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[3]:
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();
При необходимости с помощью метода StopAsync() можно программным способом завершить выполнение приложения:
WebApplicationBuilder builder = WebApplication.CreateBuilder();
WebApplication app = builder.Build();
app.MapGet("/", () => "Hello World!");
await app.StartAsync();
await Task.Delay(10000);
await app.StopAsync(); // через 10 секунд завершаем выполнение приложения
Файл Startup.cs и класс Startup
Файл Startup.cs — это точка входа в приложение[6], аналог Global.asax в классическом ASP.NET и он будет вызываться после выполнения файла Program.cs на уровне приложения[7]. Этот класс производит конфигурацию приложения, настраивает сервисы, которые приложение будет использовать, устанавливает компоненты для обработки запроса или middleware и обрабатывает конвейер запросов. Класс Startup запускается в момент запуска приложения.
Примечания
- ↑ Основы в ASP.NET Core. Создание и запуск приложения. WebApplication и WebApplicationBuilder. METANIT (6 декабря 2021). Дата обращения: 28 ноября 2022. Архивировано 4 октября 2022 года.
- ↑ Исходный код WebApplicationBuilder.cs (англ.). GitHub. Дата обращения: 28 ноября 2022.
- ↑ Исходный код WebApplication.cs (англ.). GitHub. Дата обращения: 28 ноября 2022.
- ↑ Переход с ASP.NET Core 5.0 на 6.0: Новая модель размещения. Документация к ASP.NET Core (30 сентября 2022). Дата обращения: 28 ноября 2022. Архивировано 28 ноября 2022 года.
- ↑ Универсальный узел .NET в ASP.NET Core. Microsoft Learn: Документация к ASP.NET Core 7.0 (30 сентября 2022). Дата обращения: 28 ноября 2022. Архивировано 28 ноября 2022 года.
- ↑ Класс Startup. METANIT (30 октября 2019). Дата обращения: 28 ноября 2022. Архивировано 25 мая 2022 года.
- ↑ Что из себя представляет класс Startup и Program.cs в ASP.NET Core. Хабрахабр (15 февраля 2021). Дата обращения: 27 ноября 2022. Архивировано 22 сентября 2022 года.