我有一个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指令或程序集 参考?)
还有其他人遇到过同样的问题吗?
答案 0 :(得分:1)
最后,我能够找出问题所在。问题是我缺少Microsoft.Extensions.DependencyInjection.Abstractions
的参考。通常,当您安装Microsoft.Extensions.DependencyInjection
软件包时,它将被添加到您的软件包中,似乎它没有以某种方式自动添加到我的解决方案中。在我添加Microsoft.Extensions.DependencyInjection.Abstractions
之后,构建错误就消失了。
您还可以尝试删除软件包Microsoft.Extensions.DependencyInjection
,然后重新安装该软件包,并检查它是否默认添加了Microsoft.Extensions.DependencyInjection.Abstractions
。
希望有帮助。