ServiceCollection 不包含 AddScoped 的定义,并且找不到接受第一个类型参数的可访问扩展方法

Sib*_*enu 2 c# windows-services dependency-injection quartz-scheduler service-provider

我有一个Quartz用于安排任务的 Windows 服务。而且我试图在Dependency Injection默认情况下实现asQuartz不支持 default Job Factory。所以我必须创建一个自定义Job Factory如下。

var scheduler = await GetScheduler();
var serviceProvider = GetConfiguredServiceProvider();
scheduler.JobFactory = new CustomJobFactory(serviceProvider);
Run Code Online (Sandbox Code Playgroud)

下面是我的代码GetConfiguredServiceProvider()

private IServiceProvider GetConfiguredServiceProvider() {
    var services = new ServiceCollection()
    .AddScoped<IDailyJob, DailyJob>()
    .AddScoped<IWeeklyJob, WeeklyJob>()
    .AddScoped<IMonthlyJob, MonthlyJob>()
    .AddScoped<IHelperService, HelperService>();
    return services.BuildServiceProvider();
}
Run Code Online (Sandbox Code Playgroud)

但在线上.AddScoped<IDailyJob, DailyJob>()我收到一个错误

严重性代码说明项目文件行抑制状态错误 CS1061“ServiceCollection”不包含“AddScoped”的定义,并且找不到接受“ServiceCollection”类型的第一个参数的可访问扩展方法“AddScoped”(您是否缺少 using 指令或汇编参考?)

还有其他人遇到过同样的问题吗?

Sib*_*enu 5

最后我能够弄清楚这个问题。问题是我缺少Microsoft.Extensions.DependencyInjection.Abstractions. 通常这会在您安装软件包时添加到您的Microsoft.Extensions.DependencyInjection软件包中,似乎它没有自动添加到我的解决方案中。在我添加之后Microsoft.Extensions.DependencyInjection.Abstractions,构建错误消失了。

您也可以尝试删除该软件包Microsoft.Extensions.DependencyInjection,然后重新安装它并检查它是否Microsoft.Extensions.DependencyInjection.Abstractions默认添加了该软件包。

在此处输入图片说明

希望能帮助到你。