TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #1290 1.44K
День 1052. #ЗаметкиНаПолях #ExploringNET6
Исследуем .NET 6. Часть 3
В этой серии статей рассмотрим подробно некоторые из новых функций, которые появились в .NET 6.
Часть 1
Часть 2

Рассматриваем код WebApplicationBuilder
Напомню стандартный шаблон нового минимального API приложения ASP.NET Core:
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);

// добавляем конфигурацию
builder.Configuration.AddJsonFile("sharedsettings.json");

// добавляем сервисы
builder.Services.AddSingleton<MyTestService>();
builder.Services.AddRazorPages();

// добавляем ведение журнала
builder.Logging.AddFile();

// строим!
WebApplication app = builder.Build();

app.UseStaticFiles();

// добавляем конечные точки
app.MapGet("/", () => "Hello World!");
app.MapRazorPages();

// запускаем!
app.Run();

Первым шагом является создание экземпляра WebApplicationBuilder с использованием статического метода класса WebApplication:
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);

Ниже приведены приватные и публичные члены класса WebApplicationBuilder:
public sealed class WebApplicationBuilder
{
private readonly HostBuilder _hostBuilder = new();
private readonly BootstrapHostBuilder _bootstrapHostBuilder;
private readonly WebApplicationServiceCollection _services = new();

public IWebHostEnvironment Environment { get; }
public IServiceCollection Services { get; }
public ConfigurationManager Configuration { get; }
public ILoggingBuilder Logging { get; }

public ConfigureWebHostBuilder WebHost { get; }
public ConfigureHostBuilder Host { get; }

public WebApplication Build()
}

Публичный API состоит из набора свойств только для чтения, и метода Build(), который создаёт WebApplication.

Многие из этих свойств используют стандартные типы из предыдущих версий:
- IWebHostEnvironment – используется для получения имени среды, пути к корню контента и подобных значений.
- IServiceCollection – используется для регистрации сервисов в контейнере DI. Обратите внимание, что это альтернатива методу ConfigureServices(), используемому универсальным хостом для достижения того же результата.
- ConfigurationManager – используется как для добавления новой конфигурации, так и для получения значений конфигурации. См. первый пост в серии, где обсуждается этот вопрос.
- ILoggingBuilder – используется для регистрации дополнительных поставщиков журналов, как и в случае с методом ConfigureLogging() в универсальном хосте.
- Свойства WebHost и Host интересны тем, что они предоставлены новыми типами ConfigureWebHostBuilder и ConfigureHostBuilder. Эти типы реализуют IWebHostBuilder и IHostBuilder соответственно и в основном представлены как замена для используемых ранее методов расширения.

Приватные члены класса содержат:
- вспомогательный класс BootstrapHostBuilder, который «запоминает» переданные ему делегаты конфигурации для последующего их вызова в правильном порядке при построении хоста. Кроме того, он вызывает знакомые нам по .NET 3.x/5 методы расширения CreateDefaultBuilder и ConfigureWebHostDefaults.
- HostBuilder – экземпляр универсального хоста, который является «внутренним» хостом в WebApplicationBuilder. WebApplicationBuilder действует как «адаптер» для универсального хоста _hostBuilder, предоставляя императивный API и сохраняя при этом ту же функциональность, что и универсальный хост.
См. рисунок ниже.

В методе Build() вся конфигурация, сделанная по умолчанию, а также добавленная пользователем в файле Program.cs, передаётся в _hostBuilder в правильном порядке, и возвращается новый экземпляр WebApplication, в конструктор которого передаётся построенный «внутренний» хост:
_builtApplication = new WebApplication(_hostBuilder.Build());
…
return _builtApplication;

Подробнее перевод статьи с примерами кода размещён на Хабре.

Источник:
https://andrewlock.net/exploring-dotnet-6-part-3-exploring-the-code-behind-webapplicationbuilder/
More from @netdeveloperdiary
  1. Oct 15, 2026Post #3374
  2. Oct 14, 2026Post #3373
  3. Oct 13, 2026День 2813. #ЗаметкиНаПолях #Async Ещё Раз Про Async/Await в C#. Часть 1 Почему существует…
  4. Oct 12, 2026День 2812. #Карьера #AI Как Разработчикам Оставаться Полезными, Когда Код Пишет ИИ? По мер…
  5. Oct 11, 2026День 2811. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  6. Oct 10, 2026День 2810. #ЧтоНовенького #VSCode Более Быстрый и Лёгкий C# Dev Kit Мы, разработчики, люби…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →