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

.NET 6中Quartz.NET 3.7如何通过依赖注入注入DbContext?

在.NET 6中为Quartz.NET 3.7的Job注入DbContext

1. 配置Quartz与.NET DI容器集成

首先确保安装Quartz.Extensions.DependencyInjection NuGet包,然后在Program.cs中完成DbContext和Quartz的注册:

var builder = WebApplication.CreateBuilder(args);

// 注册你的DbContext
builder.Services.AddDbContext<PtmDBContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("YourConnectionString")));

// 配置Quartz
builder.Services.AddQuartz(q =>
{
    // 注册具体的Job实现类(继承BaseJobMgr的子类)
    q.AddJob<YourConcreteJob>(opts => opts.WithIdentity("YourJobKey"));

    // 示例:配置触发器
    q.AddTrigger(opts => opts
        .ForJob("YourJobKey")
        .WithIdentity("YourTriggerKey")
        .WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever()));
});

// 添加Quartz后台宿主服务
builder.Services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true);

var app = builder.Build();

// ... 其他中间件配置

app.Run();

2. 修改BaseJobMgr的构造函数

调整基类构造函数,接收并存储DbContext,确保依赖能被DI容器注入:

public abstract class BaseJobMgr : IJob
{
    protected readonly PtmDBContext _ctx;

    // 构造函数注入DbContext,添加空检查避免空引用
    protected BaseJobMgr(PtmDBContext ctx)
    {
        _ctx = ctx ?? throw new ArgumentNullException(nameof(ctx));
    }

    public abstract Task Execute(IJobExecutionContext context);
}

3. 实现具体Job子类

创建继承自BaseJobMgr的具体Job类,DI会自动将DbContext传递到基类构造函数:

public class ConcreteJob : BaseJobMgr
{
    public ConcreteJob(PtmDBContext ctx) : base(ctx)
    {
    }

    public override async Task Execute(IJobExecutionContext context)
    {
        // 直接使用基类的_ctx进行数据库操作
        var data = await _ctx.YourTable.ToListAsync();
        // ... 执行你的业务逻辑
    }
}

关键说明

  • Quartz.Extensions.DependencyInjection包是核心,它替换了Quartz默认的JobFactory,让Job实例能从.NET DI容器中解析,从而支持构造函数注入。
  • Job默认是瞬态实例,每次执行都会创建新的Job对象,DbContext的生命周期会被DI自动管理,避免并发问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:01:05