问题描述
我正在开发一个 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
并对其执行操作。