using Admin.Core.Tasks; using Microsoft.Extensions.DependencyInjection; using Quartz; using Quartz.Spi; using System; using System.Linq; using System.Reflection; namespace Admin.Core.Extensions { /// /// 任务调度 启动服务 /// public static class JobSetup { public static void AddJobSetup(this IServiceCollection services) { if (services == null) throw new ArgumentNullException(nameof(services)); //services.AddHostedService(); //services.AddHostedService(); services.AddSingleton(); //services.AddTransient(); //services.AddTransient();//Job使用瞬时依赖注入 //services.AddTransient();//Job使用瞬时依赖注入 services.AddSingleton(); //任务注入 var baseType = typeof(IJob); var path = AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory; var referencedAssemblies = System.IO.Directory.GetFiles(path, "Admin.Core.Tasks.dll").Select(Assembly.LoadFrom).ToArray(); var types = referencedAssemblies .SelectMany(a => a.DefinedTypes) .Select(type => type.AsType()) .Where(x => x != baseType && baseType.IsAssignableFrom(x)).ToArray(); var implementTypes = types.Where(x => x.IsClass).ToArray(); foreach (var implementType in implementTypes) { services.AddTransient(implementType); } } } }