public XxlJobMiddleware(ILogger <XxlJobMiddleware> logger, XxlJobOptions options, XxlJobRouteTable routeTable, RequestDelegate next) { _logger = logger; _options = options; _routeTable = routeTable; _next = next; }
public static IServiceCollection AddXxlJob(this IServiceCollection services, Action <XxlJobOptions> action) { var options = new XxlJobOptions(); action?.Invoke(options); services.AddSingleton(options); // xxl job service services.Add(new ServiceDescriptor(typeof(IXxlJobExecutor), typeof(XxlJobExecutor), ServiceLifetime.Singleton)); services.AddSingleton <IProcessor, ExecutorRegistryProcessor>(); services.AddTransient <IRestClient>(p => { var conf = p.GetRequiredService <XxlJobOptions>(); return(new RestClient(conf.AdminUrl)); }); services.AddSingleton <IJobDispatcher, JobDispatcher>(); services.AddSingleton <IJobSender, XxlJobSender>(); services.AddTransient <XxlJobQueue>(); services.AddSingleton <IJobLoggerStore, LiteDBLoggerStore>(); // route var routeTable = new XxlJobRouteTable(); services.AddSingleton(routeTable); foreach (var route in routeTable) { services.AddScoped(route.TypeController); } // host service services.AddHostedService <XxlJobBackgroundService>(); // job handler services.Add(new ServiceDescriptor(typeof(IXxlJobServicesProvider <>), typeof(XxlJobServicesProvider <>), ServiceLifetime.Singleton)); services.ScanDynamicJobExecutorHandler(options.HandlerServiceLifetime); return(services); }