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

如何为Quartz.NET作业集成依赖注入并注入Logger?

解决Quartz.NET作业中注入Logger的问题

正确配置步骤:

  1. 修改KasaJob类,添加Logger构造函数
    在Job类中注入ILogger<KasaJob>,并在执行逻辑中使用:

    public class KasaJob : IJob
    {
        private readonly ILogger<KasaJob> _logger;
    
        public KasaJob(ILogger<KasaJob> logger)
        {
            _logger = logger;
        }
    
        public Task Execute(IJobExecutionContext context)
        {
            _logger.LogInformation("KasaJob执行于:{Time}", DateTime.UtcNow);
            // 执行你的任务逻辑
            return Task.CompletedTask;
        }
    }
    
  2. 调整Quartz服务配置
    必须明确启用Microsoft依赖注入作业工厂,并通过AddJob+AddTrigger的方式配置Job,替代原有的ScheduleJob<T>快捷方式:

    HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
    
    // 确保日志服务已添加(默认Host创建时已包含,可省略但建议保留)
    builder.Services.AddLogging();
    
    builder.Services.AddQuartz(q =>
    {
        // 启用Microsoft DI作业工厂,让Quartz从DI容器获取Job实例
        q.UseMicrosoftDependencyInjectionJobFactory();
    
        // 注册KasaJob到Quartz,并指定唯一标识
        q.AddJob<KasaJob>(opts => opts.WithIdentity("KasaJob"));
    
        // 为注册的Job添加触发器
        q.AddTrigger(opts => opts
            .ForJob("KasaJob")
            .StartAt(DateBuilder.EvenSecondDate(DateTimeOffset.UtcNow.AddSeconds(2)))
            .WithSimpleSchedule(t => t.WithIntervalInSeconds(10).RepeatForever())
            .WithIdentity("KasaJobTrigger"));
    });
    
    builder.Services.AddQuartzHostedService(options =>
    {
        options.WaitForJobsToComplete = true;
    });
    
    using IHost host = builder.Build();
    await host.RunAsync();
    

关键说明:

  • 原ScheduleJob<T>方式会让Quartz自行实例化Job,不会调用DI容器,因此无法解析构造函数中的Logger依赖。
  • UseMicrosoftDependencyInjectionJobFactory()必须显式调用,确保Quartz使用DI容器创建Job实例。
  • 无需单独调用builder.Services.AddTransient<KasaJob>(),q.AddJob<KasaJob>()会自动将Job注册到DI容器(默认生命周期为Transient)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:22:37