JobSetup.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using Microsoft.Extensions.DependencyInjection;
  2. using Quartz;
  3. using Quartz.Spi;
  4. using Ropin.Inspection.Tasks.QuartzNet;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Reflection;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace Ropin.Core.Extensions.ServiceExtensions
  12. {
  13. /// <summary>
  14. /// 任务调度 启动服务
  15. /// </summary>
  16. public static class JobSetup
  17. {
  18. public static void AddJobSetup(this IServiceCollection services)
  19. {
  20. if (services == null) throw new ArgumentNullException(nameof(services));
  21. //services.AddHostedService<Job1TimedService>();
  22. //services.AddHostedService<Job2TimedService>();
  23. services.AddSingleton<IJobFactory, JobFactory>();
  24. //services.AddTransient<Job_Blogs_Quartz>();//Job使用瞬时依赖注入
  25. //services.AddTransient<Job_OperateLog_Quartz>();//Job使用瞬时依赖注入
  26. services.AddSingleton<ISchedulerCenter, SchedulerCenterServer>();
  27. //任务注入
  28. var baseType = typeof(IJob);
  29. var path = AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory;
  30. var referencedAssemblies = System.IO.Directory.GetFiles(path, "Ropin.Inspection.Tasks.dll").Select(Assembly.LoadFrom).ToArray();
  31. var types = referencedAssemblies
  32. .SelectMany(a => a.DefinedTypes)
  33. .Select(type => type.AsType())
  34. .Where(x => x != baseType && baseType.IsAssignableFrom(x)).ToArray();
  35. var implementTypes = types.Where(x => x.IsClass).ToArray();
  36. foreach (var implementType in implementTypes)
  37. {
  38. services.AddTransient(implementType);
  39. }
  40. }
  41. }
  42. }