Вышла версия 2.1 открытой платформы ASP.NET Core, и разработчик Дэвид Фоулер (David Fowler) поделился в «Твиттере» ее некоторыми полезными особенностями, о которых мало кто знает. Безусловно, теперь платформа работает быстрее, но также появился ряд новых возможностей и передовых методов, которые стоит рассмотреть подробнее.
Универсальный узел .NET generic host
ASP.NET Core теперь работает с новой хостинговой моделью. Приложения .NET формируют и запускают хост.
Хост отвечает за запуск приложений и управление их жизненным циклом. Задача узла Generic Host состоит в том, чтобы отделить конвейерную обработку HTTP от API веб-хоста для того, чтобы иметь возможность создавать на хосте больше сценариев. Отправка сообщений, фоновые и другие задачи, не относящиеся к HTTP, работают лучше благодаря сквозным функциям Generic Host, таким как конфигурирование, внедрение зависимостей (DI) и логирование.
Это означает, что теперь для сценариев без веб-хостинга есть не только WebHost, но и Generic Host. При этом работа будет такой же удобной, как и с ASP.NET Core, но еще у вас появятся новые возможности, такие как DI, логирование и конфигурирование. Пример кода для Generic Host можно найти на GitHub.
Интерфейс IHOSTEDSERVICE
С его помощью можно запускать длинные фоновые операции как в универсальном хосте, так и в ваших веб-приложениях. В ASP.NET Core 2.1 появилась поддержка базового класса BackgroundService, который значительно облегчает создание длинного асинхронного цикла. Пример кода для Hosted Service также находится на GitHub.
Создавать простую временную фоновую задачу:
public Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Timed Background Service is starting.");
_timer = new Timer(DoWork, null, TimeSpan.Zero,
TimeSpan.FromSeconds(5));
return Task.CompletedTask;
}
легко!
Службы windows на .NET Core
Теперь можно размещать ASP.NET Core внутри службы Windows! Многие пользователи просили добавить данную функцию. IIS вам больше не нужен, чтобы размещать все, что пожелаете. Взгляните на Microsoft.AspNetCore.Hosting.WindowsServices на NuGet и подробную документацию по размещению собственного приложения ASP.NET Core в Windows в качестве службы Windows без IIS.
public static void Main(string[] args)
{
var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
var pathToContentRoot = Path.GetDirectoryName(pathToExe);
var host = WebHost.CreateDefaultBuilder(args)
.UseContentRoot(pathToContentRoot)
.UseStartup<Startup>()
.Build();
host.RunAsService();
}
IHOSTINGSTARTUP — конфигурация IWEBHOSTBUILDER с атрибутом сборки
Как всегда, простая и точная реализация с использованием источника на GitHub.
[assembly: HostingStartup(typeof(SampleStartups.StartupInjection))]
Пакеты SHARED SOURCE
Это будет вам интересно, обязательно обратите на них внимание. Можно создавать пакеты, которые используются в качестве вспомогательных средств для исходного кода, распространяемого через shared source. Между собой мы называем их «пакеты shared source». Они используются в ASP.NET Core повсюду, когда к чему-то необходимо предоставить общий доступ, но при этом оно не должно быть общедоступно через API. Тогда ваш код будет использоваться, но не будет появляться зависимостей от конечного пакета.
Они используются в CSPROJ таким образом. Обратите внимание на атрибут PrivateAssets:
<PackageReference Include="Microsoft.Extensions.ClosedGenericMatcher.Sources" PrivateAssets="All" Version="" />
<PackageReference Include="Microsoft.Extensions.ObjectMethodExecutor.Sources" PrivateAssets="All" Version="" />
OBJECTMETHODEXECUTOR
Если вам необходимо задействовать метод в типе через отражение, и этот метод может быть асинхронным, то вам поможет оптимизированная и гибкая функция ObjectMethodExecutor, которую мы используем повсеместно в кодовой базе ASP.NET Core.
Команда использует этот код в MVC, чтобы задействовать ваши методы контроллера. Они используют этот код в SignalR для задействования методов хаба. Она работает с синхронными и асинхронными методами. Она также может работать с пользовательскими ожидаемыми объектами и асинхронными рабочими процессами F#.
SUPPRESSSTATUSMESSAGES
Небольшой и часто запрашиваемый метод. Если вам не нравится то, что выдается после запуска драйвера dotnet, когда вы размещаете веб-приложение (распечатываете информацию привязки), то вы можете использовать новый метод расширения SuppressStatusMessages.
WebHost.CreateDefaultBuilder(args)
.SuppressStatusMessages(true)
.UseStartup<Startup>();
ADDOPTIONS
В версии 2.1 стало проще настраивать параметры, для работы которых требуются сервисы. Раньше приходилось создавать тип, полученный с помощью IConfigureOptions , теперь можно сделать все это в ConfigureServices с помощью AddOptions ‹TOptions›
public void ConfigureServicdes(IServiceCollection services)
{
services.AddOptions<MyOptions>()
.Configure<IHostingEnvironment>((o,env) =>
{
o.Path = env.WebRootPath;
});
}
IHTTPCONTEXT с ADDHTTPCONTEXTACCESSOR
Обычно нет необходимости настраивать IHttpContext, но многие хотят знать, как это сделать, а некоторые считают, что это должно осуществляться автоматически. Он не регистрируется по умолчанию, так как его наличие приводит к снижению производительности. Однако в ASP.NET Core 2.1 был добавлен PR для метода расширения, что облегчит процесс, если вы этого захотите.
services.AddHttpContextAccessor ();
Итак, ASP.NET Core 2.1 готова к выпуску.
Новые функции в этой версии:
- SignalR — добавляет инструменты в ваши приложения ASP.NET Core для работы в реальном времени.
- Библиотеки класса Razor — используйте Razor для создания видов и страниц в библиотеках классов многократного использования.
- Библиотека идентификаторов пользовательских интерфейсов и автоматическая кодогенерация — добавляет идентификатор в любое приложение и настраивает его под любые ваши цели.
- HTTPS — работает по умолчанию и легко настраивается в процессе разработки.
- Добавление шаблонов для обеспечения соответствия некоторым требованиям общего положения о защите данных предоставляет пользователям возможность контролировать свои личные данные и давать согласие на использование cookies.
- Функциональная тестовая инфраструктура MVC — создавайте функциональные тесты для вашего приложения, обрабатываемого в оперативной памяти.
- [ApiController], ActionResult<Т> — создавайте точные и подробные API.
- IHttpClientFactory — HttpClient клиент как услуга, который предоставляет большие возможности для его настройки и централизованного управления.
- Kestrel в Sockets — управляемые сокеты заменяют libuv в качестве транспорта Kestrel по умолчанию.
- Унифицированный хостинг-строитель — унифицированная инфраструктура хоста, отвязанная от HTTP и с поддержкой DI, логирования и конфигурирования.
- Обновленные шаблоны SPA — шаблоны Angular, React, и React + Redux были обновлены, чтобы можно было использовать стандартные структуры проектов и создавать системы для каждой структуры (Angular CLI и create-react-app).
Посмотрите список изменений в ASP.NET Core 2.1 в документах ASP.NET Core, чтобы узнать больше об этих функциях. Полный список всех изменений в новой версии представлен в примечаниях к выпуску.
Попробуйте! Пройдите курс QuickStart — и вы сможете создавать базовые веб-приложения за 10 минут.
Комментарии (10)
VanKrock
11.07.2018 12:52IHostedService действительно отличная вещь. Этого очень не хватало, когда писал некоторые приложения, которым нужно делать что-то в фоне. Конечно это не сложно реализовать самому, но с таким интерфейсом это выглядит как то более основательно.
mayorovp
11.07.2018 13:00+1Да ну. Совершенно интуитивно непонятный интерфейс!
Вот, допустим, сервис начала останавливаться (у него был вызван StopAsync), но потом остановка была отменена. В каком состоянии он должен после этого оказаться?dotnetdonik
11.07.2018 23:51Stop/start вызывается когда стартует/останавливается хост. Впринципе это чего не было в asp.net из коробки ранее, все остальное как что шедулить и останавливать забота девелопера.
mayorovp
12.07.2018 06:36Методу Stop передается токен отмены. Каковым должно быть поведение сервиса при переходе этого токена в состояние «отменен»?
RomanPokrovskij
Не давно вышел 2.1.2 А кто-нибудь знает где у проекта AspNetCore change log?
VanKrock
На GitHub? github.com/aspnet/Home/releases
stasus
https://github.com/aspnet/home/releases в релизах ссылки на изменеия
supersmeh
Вроде тут: github.com/aspnet/home/releases