C# 使用反射将类作为输入传递

C# 使用反射将类作为输入传递,c#,class,reflection,quartz-scheduler,C#,Class,Reflection,Quartz Scheduler,我有一个创建Quartz作业并返回调度程序的函数,如下所示: public IScheduler ScheduleJob<T>(string jobName, string jobGroup, string triggerName, string triggerGroup, bool rerun, string cronSchedule = "default", string startTime = "default") where T : IJob { va

我有一个创建Quartz作业并返回调度程序的函数,如下所示:

public IScheduler ScheduleJob<T>(string jobName, string jobGroup, string triggerName, string triggerGroup, bool rerun, string cronSchedule = "default", string startTime = "default") where T : IJob
    {
        var scheduler = StdSchedulerFactory.GetDefaultScheduler();
        var jobKey = new JobKey(jobName, jobGroup);
        var job = JobBuilder.Create<T>()
                .WithIdentity(jobKey)
                .StoreDurably()
                .Build();
        var trigger = cronSchedule != "default" ? QuartzCreateCronTrigger(triggerName, triggerGroup, cronSchedule, rerun, startTime) : QuartzCreateTrigger(triggerName, triggerGroup);

        scheduler.ScheduleJob(job, trigger);
        return scheduler;
    }

您应该编写
新的QuartzConstrainst().ScheduleJob
,而不是
.ScheduleJob

job
不是一种类型,您自己说过
ScheduleJob不应该是IJob
类型

如果要将
var作业
传递给
ScheduleJob
,则应定义
ScheduleJob
,如下所示:

public IScheduler ScheduleJob<T>(
    T job, // <-- add this
    string jobName,
    string jobGroup,
    string triggerName,
    string triggerGroup,
    bool rerun,
    string cronSchedule = "default",
    string startTime = "default") where T : IJob
{
    // code
}

CreateScheduler
方法中声明
var job
有什么意义?它没有在任何地方使用。我正在尝试在
ScheduleJob
中使用它将类传递给
ScheduleJob
方法
job
具有类型
IJob
。我正在尝试将名为
jobName
的类传递到
ScheduleJob
。我想我可以通过反思来做到这一点,这就是我在上面所做的。还有别的办法吗?我看过你的编辑。添加作业的意义是什么?它永远不会在
ScheduleJob
的代码中使用,因为我无法将行
JobBuilder.Create()…
替换为
JobBuilder.Create()…
,此外,使用
ScheduleJob
会给出错误,即
Probem实例化类'Quartz.IJob'-->System.ArgumentException:无法实例化没有空构造函数的类型。参数名称:IJob
 var scheduler =
     new QuartzConstraints().ScheduleJob<ThisIsAJobClass>(
        "ThisIsAJobClass",
        "JobGroup1",
        "ThisIsAJobClassTrigger",
        "JobGroup1",
        true,
        "0 0/1 * ? * MON-FRI",
        "6:20 AM");
scheduler.Start();
public IScheduler ScheduleJob<T>(
    T job, // <-- add this
    string jobName,
    string jobGroup,
    string triggerName,
    string triggerGroup,
    bool rerun,
    string cronSchedule = "default",
    string startTime = "default") where T : IJob
{
    // code
}
public static void CreateScheduler(bool rerun, string jobName, string jobType, string schedule, string startTime)
{
    var job =  (IJob) Activator.CreateInstance(Type.GetType("MyProject.Jobs." + jobType + "." + jobName + ", " + Assembly.GetExecutingAssembly().FullName.ToString()));
    var scheduler =
        new QuartzConstraints().ScheduleJob<IJob>(
            job // <-- add this
            jobName,
            jobType,
            jobName + "Trigger",
            jobType,
            rerun,
            schedule,
            startTime);
    scheduler.Start();
}