通过构造函数获取ISchedulerFactory
private async void InitJob()
{
var _scheduler = await _schedulerFactory.GetScheduler();
_scheduler.JobFactory = new QuartzJobFactory(_serviceProvider); ;// await factory.GetScheduler();
IJobDetail job = JobBuilder.Create<QuartzJobServer>()//
.WithIdentity("job1", "group1")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
//.WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever())
.WithCronSchedule(coravelConfig.CustomCorn!)
.Build();
await _scheduler.ScheduleJob(job, trigger);
await _scheduler.Start();
}
public class QuartzJobFactory : IJobFactory
{
private readonly IServiceProvider _serviceProvider;
public QuartzJobFactory(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
return _serviceProvider.GetService<QuartzJobServer>()!;
}
public void ReturnJob(IJob job)
{
var disposable = job as IDisposable;
disposable?.Dispose();
}
//public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
//{
// throw new NotImplementedException();
//}
//public void ReturnJob(IJob job)
//{
// throw new NotImplementedException();
//}
}
public class QuartzJobServer : IJob
{
private readonly ISynchronousService _synchronousService;
public QuartzJobServer(
ISynchronousService synchronousService
// IServiceScopeFactory serviceScopeFactory
)
{
_synchronousService = synchronousService;// serviceScopeFactory.CreateScope().ServiceProvider.GetService<ISynchronousService>()!;// synchronousService;
}
public async Task Execute(IJobExecutionContext context)
{
await _synchronousService.GetPayData(DateTime.Now.ToString("yyyyMMdd"), TypeEnum.New);
await Task.CompletedTask;
}
}
services.AddScoped<MainFrom>();
services.AddWindowsFormsBlazorWebView();
services.AddMasaBlazor();
services.AddScoped<QuartzJobServer>();
services.AddScoped<ISynchronousService, SynchronousService>();
services.AddLogging(x => x.AddNLog());
services.AddQuartz();
services.AddSignalR();
services.AddQuartzHostedService(x => x.WaitForJobsToComplete = true);
services.AddSingleton<IConfiguration>(configBuild);
var config = configBuild.GetSection("CustomParameter").Get<CoravelConfig>();
var dbConfig = configBuild.GetSection("ConnectionStrings").Get<DbConfig>();
services.Configure<CoravelConfig>(x => x.CustomCorn = config!.CustomCorn);
services.Configure<DbConfig>(x => x.ConnString = dbConfig!.ConnString);
return services.BuildServiceProvider();
//这里有些是我自己的,用的blazor-winform,自己看着删除
最后添加启动
var serviceProvider = services.InitDI(configBuild);
Application.Run(serviceProvider.GetRequiredService<MainFrom>());