.net-core - 在 .NET Core Worker 服务中根据 Configuration 注册 Hosted Services

标签 .net-core windows-services service-worker asp.net-core-hosted-services

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

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

有没有办法根据配置设置(例如 appsettings.json)添加这些服务(TestWorker1、TestWorker2),以便仅注册配置文件中定义的服务。

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

提前致谢。

最佳答案

你可以做这样的事情,你可以从任何 IConfiguration 读取你的配置。

Ignore the config["HostedServices"] = "worker1"; it is just for testing purpose.

        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 中找到您可以测试的完整示例

关于.net-core - 在 .NET Core Worker 服务中根据 Configuration 注册 Hosted Services,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61040475/

相关文章:

razor - 如何将动态javascript注入(inject)asp .net core razor View

.net-core - 404 尝试将上游路径路由到 Ocelot 中的下游路径

java - 在 Windows linux 和 MAC 上安装和运行应用程序作为服务

mongodb - MongoDB 服务因服务特定错误而终止无法创建另一个系统信号量

ssl - 实践服务 worker 的选项

Azure AD Jwt token 验证无互联网

c# - Windows 服务在程序集加载时锁定

javascript - 仅在 chrome : Failed to load the script unexpectedly 中重新启动时服务 worker 错误

reactjs - 如何在 create-react-app 中以开发模式启用 Service Worker?

c# - Json.Net,如何使用 'Z' 而不是 +00 :00, 序列化 DateTimeOffset 但保留其他时区偏移量?