#asp.net-core #background-service #asp.net-core-3.0 #.net-core-3.0
#asp.net-core #фоновая служба #asp.net-core-3.0 #.net-core-3.0
Вопрос:
я хочу создать универсальный рабочий для BackgroundService в .net core 3.0.
Где у нас может быть 50 рабочих с одинаковым видом работы, за исключением того, что необходимо передать два разных параметра.
Есть ли способ добавить hostedservice в ConfigureServices с object и получить этот объект в универсальном рабочем классе и работать с ним?. Нравится ,
var workers = new List<WorkerModel>();
foreach(var worker in workers){
services.AddHostedService<GenericWroker<WorkerModel>(item)>();
}
я был бы признателен за руководство по выполнению работы.
Комментарии:
1. Что вы хотите передать?
2. Для моего сценария у меня есть 50 баз данных и 1 основная база данных. я хочу синхронизировать в фоновом режиме определенную таблицу каждой базы данных с основной базой данных. Для этого не рекомендуется создавать каждого рабочего для каждой базы данных. Итак, мне интересно, возможно ли создать общий фоновый рабочий для этого. Я понял, если не ошибаюсь, регистрация hostedservice в configureservice была бы одним фоновым рабочим. Итак, мне нужно передать строку подключения каждой базы данных универсальному рабочему и зарегистрировать их в службе для работы с отдельным рабочим.
Ответ №1:
Я думаю, что вам нужно, чтобы ваш GenericWorker реализовал абстрактный класс BackgroundService
и зарегистрировал его при запуске как временный. Затем вам понадобится пул универсальных рабочих, в основном менеджер, после этого всякий раз, когда вам понадобится универсальный рабочий, вы должны создать его экземпляр, выполнив Serviceprovider.GetRequiredService<GenericWorker<WorkerModel>>()
, с этим решением каждый раз, когда вы запрашиваете ServiceProvider для универсального рабочего, вы будете получать новый экземпляр.