С# Best Practice решение для использования нескольких BackgroundService объектов одного класса

Я создал воркера, на базе BackgroundService. Внутри он коннектится к устройству и начинает while(cancaletionToken) цикл. Он работает, но вот мне теперь нужно создать таких несколько штук и при этом чтобы у каждого был свой IConfiguration или хотя бы свой property ip-адресса.

Есть ли какое-то build-in или best practice решение проблемы? Я, примерно, понимаю как делать это без HostBuilder-а, но интересно решение именно с ним. Я читал документацию MS и читал про Queue Service и scoped services, вроде это не то что нужно, либо я не понял их сути. Заранее спасибо

class Program
{
    static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<Service>();
            });
}

UPDATE: заранее я не знаю сколько потребуется устройств – их количество должно определяться в appsettings.json. Сейчас я вызываю ExecuteAsync сервиса в ExecuteAsync другого сервиса, столько сколько необходимо, но не уверен, что это правильное решение.


Ответы (1 шт):

Автор решения: kertak

вижу 2 варианта:

  1. в конфигурации (скорее всего apsetting.json) добавить коллекцию настроек для каждого устройства и потом в каждом Hosted сервисе брать нужный тебе.
  2. в хостед сервисе генерировать свою конфигурацию по названию .json файла по его названию
    public IConfigurationRoot GetCameraConfiguration(string fileName)
    {
        return new ConfigurationBuilder()
            .AddJsonFile(fileName, true)
            .Build();
    }

и у результата этого метода можешь вызывать, например "GetSection()"

  1. запускай несколько тасков с разными параметрами. внутри своего хостед сервиса
→ Ссылка