【问题标题】:c#/quartz - passing class as parameter of functionc#/quartz - 将类作为函数的参数传递
【发布时间】:2014-07-15 08:36:35
【问题描述】:

我有以下代码,它创建一个作业和触发器,然后用 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()'

不知道如何解决这个问题。有没有更好的方法将类作为参数传递?

【问题讨论】:

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


    【解决方案1】:

    您可能需要在方法中添加类型约束,以便编译器知道如何调用JobBuilder.Create&lt;T&gt;()。像这样:

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

    后来这样称呼它:

    ScheduleJob<DeletionJob>(...);
    

    您可以阅读有关约束herehere 的更多信息

    【讨论】:

      猜你喜欢
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多