JobFactory.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using Microsoft.Extensions.DependencyInjection;
  2. using Quartz;
  3. using Quartz.Spi;
  4. using System;
  5. namespace ZR.Tasks
  6. {
  7. public class JobFactory : IJobFactory
  8. {
  9. private readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
  10. /// <summary>
  11. /// 注入反射获取依赖对象
  12. /// </summary>
  13. private readonly IServiceProvider _serviceProvider;
  14. public JobFactory(IServiceProvider serviceProvider)
  15. {
  16. _serviceProvider = serviceProvider;
  17. }
  18. /// <summary>
  19. /// 实现接口Job
  20. /// </summary>
  21. /// <param name="bundle"></param>
  22. /// <param name="scheduler"></param>
  23. /// <returns></returns>
  24. public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
  25. {
  26. try
  27. {
  28. var serviceScope = _serviceProvider.CreateScope();
  29. var job = serviceScope.ServiceProvider.GetService(bundle.JobDetail.JobType) as IJob;
  30. return job;
  31. }
  32. catch (Exception ex)
  33. {
  34. Console.WriteLine(ex.Message);
  35. logger.Error(ex, ex.Message);
  36. throw;
  37. }
  38. }
  39. public void ReturnJob(IJob job)
  40. {
  41. if (job is IDisposable disposable)
  42. {
  43. disposable.Dispose();
  44. }
  45. }
  46. }
  47. }