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

时间:2019-08-01 14:11:30

标签: c# dependency-injection windows-services quartz-scheduler service-provider

我有一个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>()行上,我得到了一个错误

  

严重性代码描述项目文件行抑制状态   错误CS1061'ServiceCollection'不包含以下定义   'AddScoped',并且没有可访问的扩展方法'AddScoped'接受   可以找到类型为'ServiceCollection'的第一个参数(您是   缺少using指令或程序集   参考?)

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

1 个答案:

答案 0 :(得分:1)

最后,我能够找出问题所在。问题是我缺少Microsoft.Extensions.DependencyInjection.Abstractions的参考。通常,当您安装Microsoft.Extensions.DependencyInjection软件包时,它将被添加到您的软件包中,似乎它没有以某种方式自动添加到我的解决方案中。在我添加Microsoft.Extensions.DependencyInjection.Abstractions之后,构建错误就消失了。

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

enter image description here

希望有帮助。