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範圍一致了.