В .NET Core 3 появился новый шаблон проекта под названием Worker Service. Этот шаблон разработан, чтобы дать вам отправную точку для создания кроссплатформенных сервисов. В качестве альтернативного варианта использования: он дает очень хорошую среду для создания консольных приложений, которая идеально подходит для контейнеров и микросервисов.
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/61a/bbf/d74/61abbfd74ececa92f0e27a17fe13aa2c.png)
Подробнее о некоторых из преимуществ использования этого шаблона читайте под катом.
![](https://habrastorage.org/r/w1560/webt/zr/wf/ns/zrwfnstt7l3hyx-pzo_8bexswbu.png)
Шаблон Worker Service настраивает контейнер для внедрения зависимостей по умолчанию, готовый для использования. Это огромное преимущество по сравнению с общим шаблоном консоли.
Добавление служб включает обновление метода ConfigureServices в файле Program.cs:
Те же настройки провайдеров конфигурации для ASP.NET Core дублируются здесь для Worker Services. Это дает нам мощную и знакомую среду для хранения информации о конфигурации:
Для получения дополнительной информации о каждом из провайдеров, пожалуйста, смотрите мою предыдущую статью, размещенную здесь.
Аналогично, провайдеры журналов были настроены в соответствии с настройками по умолчанию для ASP.Net Core, предоставляя вам следующих провайдеров:
Вы можете добавить провайдеров логирования, добавив метод ConfigureLogging к объекту Host в Program.cs:
Для получения дополнительной информации изучайте документацию по ASP.NET Core.
Наконец, в файле Worker.cs будет существовать основная часть вашего кода. В базовом классе BackgroundService есть 3 переопределяемых метода, которые позволяют связать себя с жизненным циклом приложения:
ExecuteAsync – абстрактный метод, используемый в качестве основной точки входа для вашего приложения. Если этот метод прерывается, приложение закрывается.
StartAsync – Виртуальный метод, который, при переопределении, вызывается при запуске службы и может использоваться для одноразовой настройки ресурсов.
StopAsync – Виртуальный метод, который вызывается, когда приложение закрывается, и является хорошим местом для освобождения ресурсов и удаления объектов.
Новый шаблон Worker Service в .NET Core 3 создает среду хостинга, которая хорошо подходит для консольных приложений, микросервисов, контейнерных приложений и кроссплатформенных фоновых сервисов. Хотя эти преимущества можно настроить и независимо от шаблона, Worker Service предоставляет согласованную среду запуска для использования с ASP.NET Core и консольными приложениями.
![](https://habrastorage.org/getpro/habr/post_images/61a/bbf/d74/61abbfd74ececa92f0e27a17fe13aa2c.png)
Подробнее о некоторых из преимуществ использования этого шаблона читайте под катом.
![](https://habrastorage.org/webt/zr/wf/ns/zrwfnstt7l3hyx-pzo_8bexswbu.png)
Внедрение зависимости
Шаблон Worker Service настраивает контейнер для внедрения зависимостей по умолчанию, готовый для использования. Это огромное преимущество по сравнению с общим шаблоном консоли.
Добавление служб включает обновление метода ConfigureServices в файле Program.cs:
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddTransient<ICustomerService,CustomerService>();
services.AddHostedService<Worker>();
});
Конфигурация
Те же настройки провайдеров конфигурации для ASP.NET Core дублируются здесь для Worker Services. Это дает нам мощную и знакомую среду для хранения информации о конфигурации:
- appsettings.json
- appsettings.{среда}.json
- User Secrets (только разработка)
- Переменные среды
- Аргументы командной строки
Для получения дополнительной информации о каждом из провайдеров, пожалуйста, смотрите мою предыдущую статью, размещенную здесь.
Логирование
Аналогично, провайдеры журналов были настроены в соответствии с настройками по умолчанию для ASP.Net Core, предоставляя вам следующих провайдеров:
- Console
- Debug
- EventSource
- EventLog (только при запуске на Windows)
Вы можете добавить провайдеров логирования, добавив метод ConfigureLogging к объекту Host в Program.cs:
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
});
Для получения дополнительной информации изучайте документацию по ASP.NET Core.
Worker Startup Class
Наконец, в файле Worker.cs будет существовать основная часть вашего кода. В базовом классе BackgroundService есть 3 переопределяемых метода, которые позволяют связать себя с жизненным циклом приложения:
ExecuteAsync – абстрактный метод, используемый в качестве основной точки входа для вашего приложения. Если этот метод прерывается, приложение закрывается.
StartAsync – Виртуальный метод, который, при переопределении, вызывается при запуске службы и может использоваться для одноразовой настройки ресурсов.
StopAsync – Виртуальный метод, который вызывается, когда приложение закрывается, и является хорошим местом для освобождения ресурсов и удаления объектов.
Итого
Новый шаблон Worker Service в .NET Core 3 создает среду хостинга, которая хорошо подходит для консольных приложений, микросервисов, контейнерных приложений и кроссплатформенных фоновых сервисов. Хотя эти преимущества можно настроить и независимо от шаблона, Worker Service предоставляет согласованную среду запуска для использования с ASP.NET Core и консольными приложениями.