如何在 Quartz.NET IScheduler 中正确使用 DI?

问题描述

我正在开发一个 Asp.Net Core 3.1 应用程序,我需要在其中安排不同类型的作业。我们使用 Scoped 作业来处理 Scoped 服务(如 dbcontext)。最近,Quartz.NET 在 UseMicrosoftDependencyInjectionScopedJobFactory 的帮助下支持开箱即用的范围作业(如官方文档中所述)。

但是,我不确定如何注册实际的调度程序以便将其注入我的服务并能够在运行时调度新作业。

我知道我可以通过这样做来控制一个 IScheduler:

ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
     scheduler = schedulerFactory.GetScheduler();

但是我没有找到任何关于如何在我的实际服务管道中注册它的文档。 这样做的正确/推荐/记录方式是什么?

解决方法

Docs 描述了如何将 Quartz.NET 与 DI 容器一起使用。所以最好先检查描述的例子。

关于 ISchedulerFactory 与作用域服务的动态解析,工厂在您调用后在容器中注册:

serviceCollection.AddQuartz(q => 
{
   ...
   // your configuration
   ...
   q.UseMicrosoftDependencyInjectionScopedJobFactory()
   ...
})

因此,您可以在您的服务中注入 ISchedulerFactory 并对其执行操作。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...