【问题标题】:ServiceCollection does not contain a definition for AddScoped and no accessible extension method accepting a first argument of type could be foundServiceCollection 不包含 AddScoped 的定义,并且找不到接受第一个类型参数的可访问扩展方法
【发布时间】:2019-12-10 04:01:38
【问题描述】:

我有一个 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&lt;IDailyJob, DailyJob&gt;()线上我收到一个错误

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

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

【问题讨论】:

  • 嗯,嗯,您是否缺少 using 指令或程序集引用?
  • 我觉得应该有一个重复但我找不到一个,所以 +1(虽然是一个微不足道的修复)
  • 是的,我一开始也想,后来找不到了。这就是我发布它的原因。谢谢

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


【解决方案1】:

我终于能够找出问题所在。问题是我缺少Microsoft.Extensions.DependencyInjection.Abstractions 的引用。通常,当您安装 Microsoft.Extensions.DependencyInjection 软件包时,它会添加到您的软件包中,似乎它并没有自动添加到我的解决方案中。在我添加Microsoft.Extensions.DependencyInjection.Abstractions 之后,构建错误就消失了。

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

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多