#region << 版 本 注 释 >> /*---------------------------------------------------------------- * 命名空间:WIDESEAWCS_QuartzJob * 创建者:胡童庆 * 创建时间:2024/8/2 16:13:36 * 版本:V1.0.0 * 描述:调度服务注入 * * ---------------------------------------------------------------- * 修改人: * 修改时间: * 版本:V1.0.1 * 修改说明: * *----------------------------------------------------------------*/ #endregion << 版 本 注 释 >> using Microsoft.Extensions.DependencyInjection; using Quartz.Spi; using Quartz; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_QuartzJob.QuartzNet; namespace WIDESEAWCS_QuartzJob.QuartzExtensions { /// /// 调度服务注入 /// public static class JobSetup { /// /// 调度服务注入 /// /// /// public static void AddJobSetup(this IServiceCollection services) { if (services == null) throw new ArgumentNullException(nameof(services)); if (!HslCommunication.Authorization.SetAuthorizationCode("891c8f18-d6de-409f-81f4-6de405431905")) { Console.WriteLine("hslcommunication active failed"); Console.ReadLine(); } services.AddSingleton(); services.AddSingleton(); //将JobFactory注入到服务中 services.AddSingleton(); //将SchedulerCenterServer注入到服务中 services.AddSingleton(); //任务注入 var baseType = typeof(IJob); //获取当前应用程序域的相对搜索路径 var path = AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory; //获取指定路径下的所有程序集 var referencedAssemblies = System.IO.Directory.GetFiles(path, "WIDESEAWCS_Tasks.dll").Select(Assembly.LoadFrom).ToArray(); //获取所有定义的类型 var types = referencedAssemblies .SelectMany(a => a.DefinedTypes) .Select(type => type.AsType()) //筛选出继承自IJob的类型 .Where(x => x != baseType && baseType.IsAssignableFrom(x)).ToArray(); //获取所有实现了IJob的类型 var implementTypes = types.Where(x => x.IsClass).ToArray(); //将所有实现了IJob的类型注入到服务中 foreach (var implementType in implementTypes) { services.AddTransient(implementType); } } } }