С# 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 шт):
вижу 2 варианта:
- в конфигурации (скорее всего apsetting.json) добавить коллекцию настроек для каждого устройства и потом в каждом Hosted сервисе брать нужный тебе.
- в хостед сервисе генерировать свою конфигурацию по названию .json файла по его названию
public IConfigurationRoot GetCameraConfiguration(string fileName)
{
return new ConfigurationBuilder()
.AddJsonFile(fileName, true)
.Build();
}
и у результата этого метода можешь вызывать, например "GetSection()"
- запускай несколько тасков с разными параметрами. внутри своего хостед сервиса