public static void LoadAll(QuartzTaskCollection collect, IServiceCollection services) { var assemblies = AssemblyHelper.Load().Where(a => a.FullName.Contains("Zoomtel")); foreach (var assembly in assemblies) { if (assembly != null) { var taskTypes = assembly.GetTypes().Where(m => typeof(ITask).IsAssignableFrom(m) && m != typeof(ITask) && m != typeof(TaskAbstract)); foreach (var taskType in taskTypes) { //排除HttpTask if (!taskType.Name.Equals("HttpTask")) { var taskDescriptor = new QuartzTaskDescriptor { Name = taskType.Name, Class = $"{taskType.FullName}, {taskType.Assembly.GetName().Name}" }; var descAttr = (DescriptionAttribute)Attribute.GetCustomAttribute(taskType, typeof(DescriptionAttribute)); if (descAttr != null && descAttr.Description.NotNull()) { taskDescriptor.Name = descAttr.Description; } collect.Add(taskDescriptor); //把任务描述添加到集合 services.AddTransient(taskType); //注入任务类 //descriptor.Tasks.Add(taskDescriptor); } } } } }
/// <summary> /// 添加Quartz服务 /// </summary> /// <param name="services"></param> /// <param name="modules">模块集合</param> /// <returns></returns> public static IServiceCollection AddQuartz(this IServiceCollection services, IModuleCollection modules) { var collection = new QuartzModuleCollection(); #region ==反射注入所有模块的任务服务== if (modules != null && modules.Any()) { foreach (var module in modules) { var descriptor = new QuartzModuleDescriptor { Module = module }; var quartzAssembly = module.AssemblyDescriptor.Quartz; if (quartzAssembly != null) { var taskTypes = module.AssemblyDescriptor.Quartz.GetTypes().Where(m => typeof(ITask).IsAssignableFrom(m)); foreach (var taskType in taskTypes) { //排除HttpTask if (!taskType.Name.Equals("HttpTask")) { var taskDescriptor = new QuartzTaskDescriptor { Name = taskType.Name, Class = $"{taskType.FullName}, {taskType.Assembly.GetName().Name}" }; var descAttr = (DescriptionAttribute)Attribute.GetCustomAttribute(taskType, typeof(DescriptionAttribute)); if (descAttr != null && descAttr.Description.NotNull()) { taskDescriptor.Name = descAttr.Description; } descriptor.Tasks.Add(taskDescriptor); } services.AddTransient(taskType); } } foreach (var task in descriptor.Tasks) { descriptor.TaskSelect.Add(new OptionResultModel { Label = task.Name, Value = task.Class }); } collection.Add(descriptor); } } #endregion //注入调度模块集合 services.AddSingleton <IQuartzModuleCollection>(collection); //注入日志 services.TryAddTransient <ITaskLogger, TaskLogger>(); //注入Quartz服务实例 services.AddSingleton <IQuartzServer, QuartzServer>(); //注入应用关闭事件 services.AddSingleton <IAppShutdownHandler, QuartzAppShutdownHandler>(); return(services); }