Универсальный рабочий для BackgroundService в .net core 3.0

#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 для универсального рабочего, вы будете получать новый экземпляр.