【发布时间】:2022-08-19 01:38:43
【问题描述】:
我正在尝试在 .NET 6 中编写 Windows 服务(第一次尝试)。我已经能够很好地设置项目,但是当我尝试链接依赖项时遇到了问题。因此,我的构造函数将设置为这样的(Worker 添加为 HostedService,其他为 Singleton):
public class Settings
{
public Settings(){}
}
public class Class1
{
private readonly ILogger<Class1> _Logger;
private readonly Settings _Settings;
public Class1(ILogger<Class1> logger, Settings settings)
{
_Logger = logger;
_Settings = settings;
}
}
public class Class2
{
private readonly ILogger<Class2> _Logger;
private readonly Settings _Settings;
public Class2(ILogger<Class2> logger, Settings settings)
{
_Logger = logger;
_Settings = settings;
}
}
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _Logger;
private readonly Settings _Settings;
private readonly Class1 _Class1;
private readonly Class2 _Class2;
public Worker(ILogger<Worker> logger, Settings settings, Class1 class1, Class2 class2)
{
_Logger = logger;
_Settings = settings;
_Class1 = class1;
_Class2 = class2;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_Logger.LogInformation(\"Worker running at: {time}\", DateTimeOffset.Now);
await Task.Delay(1000, stoppingToken);
}
}
}
var host = Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.AddHostedService<Worker>()
.AddSingleton<Settings>()
.AddSingleton<Class1>()
.AddSingleton<Class2>()
})
.Build();
await host.RunAsync();
现在,当它尝试解决依赖关系时,我收到以下错误消息:
验证服务描述符 \'ServiceType: Microsoft.Extensions.Hosting.IHostedService Lifetime: Singleton ImplementationType: DI.Worker\' 时出错:找不到适合类型 \'DI.Class1\' 的构造函数。确保类型是具体的,并且为公共构造函数的所有参数注册了服务。
我去尝试按照documentation 中列出的步骤进行操作,但我得到了同样的错误。我想我错过了一些东西,但我不知道是什么。
-
这里没有足够的细节。向我们展示更多关于
Class1和实际代码的信息,因为您在此处显示的内容永远无法编译。还要展示你是如何将所有这些添加到 DI 中的。 -
您是否在 DI 中注册了
Settings、Class1、...?serviceCollection.AddSingleton<Settings>(); serviceCollection.AddSingleton<Class1>(); ...之类的东西? -
我添加了完整的实现