Комментарии 4
глобалньый вопрос , зачем их в предыдущей версии соединили , еще шилили что теперь можно создавать и консольное и ве бприложение из одного hostbuilder или как там он назывался , а теперь опять разъединили на сервайс и веб
Реализации IHostBuilder
и IWebHostBuilder
, если вы о них, по прежнему разъединены. Просто доступны через единый интерфейс - свойства WebApplicationBuilder
: Host
и WebHost
соответственно.
Трудно ответить про одно ли мы говорим, но попробую еще уточнить.
То что было:
WebHost
HostBuilder
Потом объединили в:
Host.Create***
"вы можете использовать обновленный Generic Host Builder вместо Web Host Builder. Это дает возможность создавать любые приложения, начиная от консольных приложений и WPF и заканчивая веб-приложениями на одной базовой хостинговой парадигме с одинаковыми общими абстракциями."
А теперь опять два отдельных класа для web'а и всего остального?!
Есть 2 билдера WebHostBuilder
(только для веба) и HostBuilder
(универсальный).
В классе Program.cs
в ASP.NET Core 2.x создавался только WebHostBuilder
:
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
В ASP.NET Core 3.x/5 добавили универсальный хост как раз для других типов приложений (не веб). Сначала в CreateDefaultBuilder
создаётся IHostBuilder
(универсальный), а потом метод расширения ConfigureWebHostDefaults()
оборачивает IHostBuilder
во внутренний класс GenericWebHostBuilder
и устанавливает значения по умолчанию для веба, которые WebHost.CreateDefaultBuilder()
выполнял в ASP.NET Core 2.1. GenericWebHostBuilder
действует как адаптер между старым IWebHostBuilder
и новым IHostBuilder
:
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
};
В .NET 6 сделали только API поверх вот этого всего. Новые классы WebApplication
и WebApplicationBuilder
просто оборачивают кучу кода из файлов Program.cs и Startup.cs в более минималистичную форму. WebHost
и HostBuilder
остались "под капотом". Они доступны через свойства WebApplicationBuilder.WebHost
и WebApplicationBuilder.Host
.
Так что в плане универсального хоста и веб хоста ничего не изменилось. На них просто накинули ещё одну обёртку, чтобы упростить код создания и запуска приложения. Но ничего не мешает использовать старый шаблон (да и для крупных приложений, скорее всего, старый шаблон так и будет использоваться).
Исследуем .NET 6. Часть 4. Создание конвейера промежуточного ПО в WebApplication