You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.8 KiB
46 lines
1.8 KiB
using Microsoft.Extensions.DependencyInjection; |
|
using Quartz.Spi; |
|
using Quartz; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Linq; |
|
using System.Text; |
|
using System.Threading.Tasks; |
|
|
|
namespace Elight.Logic.Job |
|
{ |
|
/// <summary> |
|
/// 该工厂将一个IServiceProvider传入构造函数中,并实现IJobFactory接口。 |
|
/// </summary> |
|
/// Author:mxg |
|
/// CreatedTimed:2020-06-16 11:40 |
|
public class JobFactory : IJobFactory |
|
{ |
|
private readonly IServiceProvider _serviceProvider; |
|
|
|
public JobFactory(IServiceProvider serviceProvider) |
|
{ |
|
_serviceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider)); |
|
} |
|
|
|
/// <summary> |
|
/// 在这个方法中工厂必须返回Quartz调度程序所请求的IJob。在此实现中,我们直接委托给IServiceProvider,并让DI容器找到所需的实例。由于GetRequiredService的非泛型版本返回的是一个对象,因此我们必须在末尾将其强制转换成IJob。 |
|
/// </summary> |
|
/// <param name="bundle"></param> |
|
/// <param name="scheduler"></param> |
|
/// <returns></returns> |
|
public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler) |
|
{ |
|
return (_serviceProvider.GetRequiredService(bundle.JobDetail.JobType) as IJob)!; |
|
} |
|
|
|
/// <summary> |
|
/// 该ReturnJob方法是调度程序尝试返回(即销毁)工厂创建的作业的地方。不幸的是,使用内置的IServiceProvider没有这样做的机制。我们无法创建适合Quartz API所需的新的IScopeService,因此我们只能创建单例作业。 |
|
/// </summary> |
|
/// <param name="job"></param> |
|
public void ReturnJob(IJob job) |
|
{ |
|
// we let the DI container handler this |
|
} |
|
} |
|
}
|
|
|