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

ServiceCollection does not contain a definition for AddScoped and no accessible extension method accepting a first argument of type could be found

我有一个 windows 服务,它使用 Quartz 来安排任务。我正在尝试实现 Dependency Injection,因为默认情况下 Quartz 不支持默认 Job Factory。所以我必须创建一个自定义 Job Factory 如下。

var scheduler = await GetScheduler();
var serviceProvider = GetConfiguredServiceProvider();
scheduler.JobFactory = new CustomJobFactory(serviceProvider);

下面是我的代码 GetConfiguredServiceProvider()

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

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

Severity Code Description Project File Line Suppression State Error CS1061 'ServiceCollection' does not contain a definition for 'AddScoped' and no accessible extension method 'AddScoped' accepting a first argument of type 'ServiceCollection' could be found (are you missing a using directive or an assembly reference?)

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

我终于弄清楚了问题所在。问题是我缺少 Microsoft.Extensions.DependencyInjection.Abstractions 的参考。通常这会在您安装 Microsoft.Extensions.DependencyInjection 包时添加到您的包中,但似乎不知何故它并没有自动添加到我的解决方案中。在我添加 Microsoft.Extensions.DependencyInjection.Abstractions 之后,构建错误消失了。

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

希望对您有所帮助。