This commit is contained in:
mukmyash
2019-06-01 12:37:22 +05:00

View File

@@ -35,6 +35,33 @@ namespace QuartzHostedService
return jobRegistrator.RegiserJob<TJob>(triggers());
}
public static IServiceCollection AddQuartzJobDetail(this IServiceCollection services, Func<IJobDetail> detail)
{
services.AddSingleton<IScheduleJob>(provider => new ScheduleJob(detail(), new List<ITrigger>()));
return services;
}
public static IServiceCollection AddQuartzJob<TJob>(this IServiceCollection services, string identity) where TJob : class
{
return services.AddQuartzJob<TJob>(identity, null);
}
public static IServiceCollection AddQuartzJob<TJob>(this IServiceCollection services, string identity, string description) where TJob : class
{
if (!services.Any(sd => sd.ServiceType == typeof(TJob)))
{
services.AddTransient<TJob>();
}
var jobDetail = JobBuilder.Create(typeof(TJob)).WithIdentity(identity).WithDescription(description).Build();
services.AddSingleton<IScheduleJob>(provider => new ScheduleJob(jobDetail, new List<ITrigger>()));
return services;
}
public static IServiceCollection AddQuartzJobDetail(this IServiceCollection services, IJobDetail detail)
{
services.AddSingleton<IScheduleJob>(provider => new ScheduleJob(detail, new List<ITrigger>()));
return services;
}
public static IServiceCollection AddQuartzJob<TJob>(this IServiceCollection services) where TJob : class
{
services.AddTransient<TJob>();
@@ -49,6 +76,22 @@ namespace QuartzHostedService
{
return app.UseQuartzJob<TJob>(new TriggerBuilder[] { triggerBuilder_func() });
}
public static IApplicationBuilder UseQuartzJob<TJob>(
this IApplicationBuilder app,string JobKey,
Func<TriggerBuilder> triggerBuilder_func)
where TJob : class, IJob
{
var _scheduleJobs = app.ApplicationServices.GetService<IEnumerable<IScheduleJob>>();
var job = from js in _scheduleJobs where js.JobDetail.JobType == typeof(TJob) && js.JobDetail.Key.Name == JobKey select js;
if (job.Any())
{
var scheduleJob = job.First();
var lstgs = (List<ITrigger>)scheduleJob.Triggers;
lstgs.Add(triggerBuilder_func().ForJob(scheduleJob.JobDetail).Build());
}
return app;
}
public static IApplicationBuilder UseQuartzJob<TJob>(
this IApplicationBuilder app,
TriggerBuilder triggerBuilder)