【发布时间】:2020-11-19 20:22:49
【问题描述】:
我正在尝试以这种方式使用 Quartz SchedulerFactory:
我正在像这样在 IServiceCollection 中将调度程序工厂添加为单例对象:
services.AddSingleton<ISchedulerFactory, StdSchedulerFactory>();
在此之后,我有一个命令处理程序,我试图将这个 SchedulerFactory 注入命令处理程序的构造函数:
private readonly ISchedulerFactory _schedulerFactory;
public TestCommandHandler(ISchedulerFactory schedulerFactory)
{
_schedulerFactory = schedulerFactory;
}
但是当我尝试启动应用程序时,服务提供商会为命令处理程序抛出此错误:
尝试激活时无法解析类型“Quartz.ISchedulerFactory”的服务
为什么服务找不到 ISchedulerFactory 的实现,尽管我已将它作为单例添加到服务中?
【问题讨论】:
-
嗨。也许 ISchedulerFactory 有一些未注册的依赖项?就像你向 StdSchedulerFactory 注入了一些东西,但你还没有在 DI 中注册?
-
将 StdSchedulerFactory 类添加到您的问题中
-
@OlegI StdSchedulerFactory 是 Quartz 包附带的内置类,该类是 ISchedulerFactory 的默认实现。
-
我找到了解决方案,我通过使用
services.getService<IScheduleFactory>()ant 获得了调度器工厂的实例,它可以工作。 -
如果可以从IServiceProvider获取服务,但是在ctor中注入却不起作用,那就有问题了。你在 DI 中注册你的 TestCommandHandler 吗?
标签: c# .net-core quartz.net