You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在DI容器或Main方法外调用Quartz.NET调度器的技术问题

Quartz.NET 调度器DI注入及外部访问问题

问题背景

我们计划使用Quartz.NET实现邮件发送、记录复制等定时任务,它适配性良好,但官方文档未针对DI容器及仓储工作单元模式更新相关内容,导致我们遇到了问题。

我们在解决方案中单独创建了JobRunner项目,用于存放调度器及各类Job,这些Job可调用业务服务层接口。当前核心问题是:在JobRunner项目的Main方法实例化调度器后,无法在外部获取该调度器的访问权限。

当前代码

Main文件代码

private static async Task Main(string[] args)
{
   LogProvider.SetCurrentLogProvider(new ConsoleLogProvider());
   // Grab the Scheduler instance from the Factory
   StdSchedulerFactory factory = new StdSchedulerFactory();
   IScheduler scheduler = await factory.GetScheduler();
   
   // and start it off
   await scheduler.Start();
   
   // and last shut down the scheduler when you are ready to close your program
   await scheduler.Shutdown();
}

典型Job代码

using Quartz;
using Compyl.AppLogic.AssessmentService;

namespace JobRunner.Jobs
{
    public class AssessmentDuplicationJob : IJob
    {
        private readonly IAssessmentService _assessmentService;
       
        public AssessmentDuplicationJob(IAssessmentService assessmentService)
        {
            _assessmentService = assessmentService;
          
        }

        public async Task Execute(IJobExecutionContext context)
        {
            var dataMap = context.MergedJobDataMap;
            var id = dataMap.GetInt("id");
            var shouldPopulateAnswers = dataMap.GetBoolean("shouldPopulateAnswers");
            _assessmentService.DuplicateAssessment(id, shouldPopulateAnswers);
        }
    }
}

需求

我们希望在JobRunner项目中创建一个通过DI持有调度器的类或方法,示例如下:

[Inject] IScheduler scheduler
public ScheduleEntity (T entity)
{
   var job = createJob(entity)//another method that creates the job and jobdatamap this is easy enough
   var trigger = createTrigger(entity)// same as above
   scheduler.ScheduleJob(job, trigger)
}

随后可以在Web应用的任意位置调用ScheduleEntity方法。

内容的提问来源于stack exchange,提问作者Morks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 18:54:40