在 .NET Core Worker 服务中根据 Configuration 注册 Hosted Services
Register Hosted Services based on Configuration in .NET Core Worker 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 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
中找到您可以测试的完整示例