32 lines
1020 B
C#
32 lines
1020 B
C#
![]() |
using Microsoft.Extensions.DependencyInjection;
|
|||
|
using Quartz;
|
|||
|
using Quartz.Spi;
|
|||
|
using System;
|
|||
|
|
|||
|
namespace HT.Cloud.Service.AutoJob
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// 依赖注入必须,代替原本的SimpleJobFactory
|
|||
|
/// </summary>
|
|||
|
public class IOCJobFactory : IJobFactory
|
|||
|
{
|
|||
|
private readonly IServiceProvider _serviceProvider;
|
|||
|
|
|||
|
public IOCJobFactory(IServiceProvider serviceProvider)
|
|||
|
{
|
|||
|
_serviceProvider = serviceProvider;
|
|||
|
}
|
|||
|
|
|||
|
public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
|
|||
|
{
|
|||
|
var serviceScope = _serviceProvider.CreateScope(); // 获得一个ioc对象,指定创建scope级别的实例(在job里面需要依赖注入ef,但是startup里面配置的ef是scope级别的,必须指定为scope,不然报错)。不写的话,默认是单例。
|
|||
|
return serviceScope.ServiceProvider.GetService(bundle.JobDetail.JobType) as IJob; // 依赖注入一个 job 然后返回
|
|||
|
}
|
|||
|
|
|||
|
public void ReturnJob(IJob job)
|
|||
|
{
|
|||
|
var disposable = job as IDisposable;
|
|||
|
disposable?.Dispose();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|