Quartz.Net 提供直接整合.Net Core DI的扩展,安装底下的套件即可
Install-Package Quartz.Extensions.DependencyInjection
而在Startup.cs中可以决定Job注入的物件之生命週期,有两种模式
q.UseMicrosoftDependencyInjectionJobFactory();q.UseMicrosoftDependencyInjectionScopedJobFactory();
UseMicrosoftDependencyInjectionJobFactory()方法
Quartz.Net官方说明意思为-保持DI配置不变,需要具有public的无参数构造函数。MS DI预设会产生临时实例,所以不能与EF Core的DbContext等Scope Service一起使用.
实际上在Asp.net core中测试发现,似乎相同的Job只会New一个实例,因此如果Job注入的DbContext都会是同一个实例,导致DbContext使用上出错.
而改用UseMicrosoftDependencyInjectionScopedJobFactory()方法,Job实例就与MS DI的Scope範围一致了.