根据.NET Core 3 Worker服务中的配置添加托管服务

问题描述 投票:0回答:1

在.NET Core 3+辅助服务中,我们可以使用CreateHostBuilder方法下的ConfigureServices注册多个辅助服务,如下所示

Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
   services.AddHostedService<TestWorker1>();
   services.AddHostedService<TestWorker2>();
});

是否有基于配置设置(例如,appsettings.json)添加这些服务(TestWorker1,TestWorker2)的方法,因此仅注册在配置文件中定义的服务。

也欢迎使用除配置文件方法之外的任何其他通用方法。

提前感谢。

.net-core windows-services service-worker asp.net-core-hosted-services
1个回答
0
投票

您可以做这样的事情。您可以从任何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中找到可以测试的完整示例

© www.soinside.com 2019 - 2024. All rights reserved.