我在.NET Core 2中成功实现了以下内容,但在.NET Core 3中无法工作。
我从头开始创建了一个新的Worker Service .Net Core 3项目,并添加了最少量的内容来重现我的错误。
下面是我的入口点Program.cs
namespace WorkerService1DeleteMe
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.Configure<ConfigChunk>(hostContext.Configuration.GetSection("ConfigChunk"));
services.AddHostedService<Worker>();
});
}
public class ConfigChunk
{
public string Server { get; set; }
}
}
因此,在此处向CreateHostBuilder
添加了一行代码,向Configure
方法添加了一个新的ConfigChunk
类,以匹配appsettings.json中部分的模式。
最后,扩展Worker构造函数的参数,使其可以消耗SettingsChunk:
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
private readonly ConfigChunk _config;
public Worker(ILogger<Worker> logger, ConfigChunk config)
{
_logger = logger;
_config = config;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
await Task.Delay(1000, stoppingToken);
}
}
}
正如提到的那样,在 NET Core 2 中可以正常工作,但在 3 中会出现以下错误:
尝试激活 'WorkerService1DeleteMe.Worker' 时无法解析类型为 'WorkerService1DeleteMe.ConfigChunk' 的服务。
我觉得我可能错过了一些非常明显的东西,但必须承认我有点迷茫。我观察到,如果我使用 services.AddSingleton
而不是 services.Configure
,整个事情就可以工作,但如果能让 Configure 方法工作起来,我更喜欢它的模式和重新加载功能。