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);
                        }
                    }
                }
            }
        }
Esempio n. 2
0
        /// <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);
        }