Quazrt.net 3.0 + net.core 2.0 : 触发器不开火

Quazrt.net 3.0 + net.core 2.0 : trigger not fire

我正在尝试在我的网络核心应用程序中使用 quartz.net 3.0 创建触发器并启动作业。 这是一个代码: mycontroller.cs

public async Task<IActionResult> CreateHomeWorkReminder([FromBody] CreateHomeWorkReminderRequest request)
{
    if (!ModelState.IsValid)
    {
        return BadRequest();
    }
    _logger.LogInformation("data valid");
    var dict = new Dictionary<string, object> { {nameof(CreateHomeWorkReminderRequest.UserId), request.UserId },
    {nameof(CreateHomeWorkReminderRequest.HomeWorkId), request.HomeWorkId}};
    await _registerJob.CreateJob<ReminderJob>(nameof(CreateHomeWorkReminder), dict, request.DateOfReminder);
    _logger.LogInformation("saving ok");
    return Ok(result.Result);
}

RegisterJob.cs(mycontroller.cs 中的构造函数中的 DI):

public class RegisterJob : IRegisterJob
{
    ISchedulerBot bot;

    public async Task CreateJob<T>(string jobName, IDictionary<string, object> map, DateTime dateOfReminder) where T : IJob
    {
        NameValueCollection props = new NameValueCollection
{
    { "quartz.serializer.type", "binary" }
};
        StdSchedulerFactory factory = new StdSchedulerFactory(props);

        // get a scheduler
        IScheduler sched = await factory.GetScheduler();
        await sched.Start();
        var job = JobBuilder.Create<ReminderJob>().Build();

        var trigger = TriggerBuilder.Create().StartNow().Build();
        await sched.ScheduleJob(job, trigger);
    }
}

}

和ReminderJob.cs

   public class ReminderJob : IJob
{
    ILogger<ReminderJob> logger;
    public ReminderJob(ILogger<ReminderJob> _logger)
    {
        logger = _logger;
    }

    public Task Execute(IJobExecutionContext context)
    {
        var parameters = context.JobDetail.JobDataMap;
        var userId = parameters.GetLongValue("UserId");
        var homeWorkId = parameters.GetLongValue("HomeWorkId");
        logger.LogInformation($"userId = {userId}, homeWorkId = {homeWorkId}");
        return Task.FromResult(0);
    }
}

我正在尝试调试我的代码,但从未转到 ReminderJob.cs 的 Execute 方法。我的错误在哪里?我应该做什么工作?感谢您的关注。

正确答案:在 Quartz 3.0 中使用 DI 是不可能的。我使用 ILogger 的 DI 删除了 ReminderJob 中的构造函数并且代码有效。

public class ReminderJob : IJob
{
    public async Task Execute(IJobExecutionContext context)
    {
        var parameters = context.JobDetail.JobDataMap;
        var userId = parameters.GetLongValue("UserId");
        var homeWorkId = parameters.GetLongValue("HomeWorkId");
        await System.Console.Out.WriteLineAsync("HelloJob is executing.");
    }