Quartz.SchedulerException:实例化类时出现问题 - Quartz 未按预期执行

kud*_*ger 3 c# windows-services quartz.net

这是我的Job,需要每一分钟执行一次,这依赖于logger

public class RefreshJob :IJob
{
    public RefreshJob(IContainerFactory containerFactory)
    {
        _logger = containerFactory.GetInstance<ILogger>();          
    }

    public Task Execute(IJobExecutionContext context)
    {
         return Task.Run(() =>
            {
                _logger.Information("Executing sample job");
                _logger.Information($"Name: {context.JobDetail.Key.Name}");
                _logger.Information($"Description: '{context.JobDetail.Description}'");
                _logger.Information($"Fire time utc: {context.FireTimeUtc:yyyy-MM-dd HH:mm:ss zzz}");
            });
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的dependency injection

   var containerFactory = new ContainerFactory();//class with GetInstance method.
  _builder.Register(c => new RefreshJob(containerFactory)).SingleInstance();
Run Code Online (Sandbox Code Playgroud)

这就是我获取scheduler参考的方式

static async Task<IScheduler> GetScheduler()
{
    var factory = new StdSchedulerFactory();
    return await factory.GetScheduler();
}
Run Code Online (Sandbox Code Playgroud)

我在start我的方法中使用它windows service

public void Start()
{
    Task<IScheduler> scheduler = GetScheduler();
    scheduler.Wait();
    _jobScheduler = scheduler.Result;
    _jobScheduler.Start();

    //Trigger
    IJobDetail job = JobBuilder.Create<RefreshCacheJob>().Build();
    ITrigger trigger = TriggerBuilder.Create()
        .WithIdentity("RefreshJob", "GroupName")
        .StartAt(DateTime.Now)
        .WithPriority(1)
        .Build();
    _jobScheduler.ScheduleJob(job, trigger);
}
Run Code Online (Sandbox Code Playgroud)

但什么也没发生。顺便说一句,我Quartz在里面使用调度程序windows service

更新了错误

Quartz.SchedulerException:实例化类“Scheduler.RefreshJob”时出现问题 ---> System.ArgumentException:无法实例化没有空构造函数的类型参数名称:RefreshJob

Chr*_*ude 5

如果需要将服务注入到作业中,请按照@foips 评论的本指南进行操作。基本上,您的 DI 容器中需要以下行:

services.AddQuartz(q =>
{
    ...
    q.UseMicrosoftDependencyInjectionJobFactory();
    ...
}
Run Code Online (Sandbox Code Playgroud)