c#/ quartz - 传递类作为函数的参数

时间:2014-07-15 00:07:15

标签: c# class parameters quartz-scheduler quartz.net

我有以下代码,它创建一个作业和触发器,然后使用Quartz调度作业:

public void ScheduleJob<T>(string jobName, string jobGroup, string triggerName, string triggerGroup)
{
    var scheduler = StdSchedulerFactory.GetDefaultScheduler();
    var jobKey = new JobKey(jobName, jobGroup);
    var job = JobBuilder.Create<T>()
        .WithIdentity(jobKey)
        .StoreDurably()
        .Build();
    var jobTrigger = QuartzConstraints.QuartzCreateTrigger(triggerName, triggerGroup);
    scheduler.ScheduleJob(job, jobTrigger);
    scheduler.Start();
}

我想将类的名称T传递给此函数,即类似的类:

class DeletionJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
      // code here
    }
}

我读了一些关于传递类作为参数的页面,但在这种情况下我无法弄清楚如何做。我收到一个错误

  

类型'T'必须可转换为'Quartz.IJob'才能使用它   作为泛型方法'JobBuilder中的参数'T'   Quartz.JobBuilder.Create()'

不确定如何解决此问题。有没有更好的方法将类作为参数传递?

1 个答案:

答案 0 :(得分:2)

可能需要在方法中添加类型约束,因此编译器将知道如何调用JobBuilder.Create<T>()。像这样:

public void ScheduleJob<T>(string jobName, string jobGroup, string triggerName, string triggerGroup) where T: IJob
{ ... }

后来称之为:

ScheduleJob<DeletionJob>(...);

您可以阅读有关约束herehere

的更多信息