基于 .NET Core 工作服务的配置注册托管服务

3
在 .NET Core 3+ 的 worker service 中,我们可以通过在 CreateHostBuilder 方法的 ConfigureServices 中注册多个 worker service。
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
   services.AddHostedService<TestWorker1>();
   services.AddHostedService<TestWorker2>();
});

是否有一种方法可以通过配置设置(例如 appsettings.json)添加这些服务(TestWorker1、TestWorker2),以便只注册在配置文件中定义的服务。

除了配置文件方法之外,任何其他通用方法也都欢迎。

提前感谢。

1个回答

4
你可以这样做,从任何IConfiguration中读取配置。

忽略config["HostedServices"] = "worker1";,这只是为了测试目的。

        var config = new ConfigurationBuilder()
                        .AddJsonFile("appsettings.json", optional: true)
                        .AddInMemoryCollection()
                        .Build();

        config["HostedServices"] = "worker1";
        // config["HostedServices"] = "worker1,worker2";

        var hostBuilder = Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
                var workersString = config.GetValue<string>("HostedServices");
                var workers = workersString.Split(",");
                if(workers.Contains("worker1"))
                {
                    services.AddHostedService<Worker1>();
                }
                if(workers.Contains("worker2"))
                {
                    services.AddHostedService<Worker2>();
                }

            }).ConfigureLogging(b => {
                b.AddConsole();
                b.SetMinimumLevel(LogLevel.Information);
            });

        using(var host = hostBuilder.Build())
        {
            await host.StartAsync();
            await host.StopAsync();
        }

你可以在这个 netfiddle 中找到一个完整的示例,可供测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接