而不是一次又一次地写这个行列表
ScheduleJob<BillingJob>(sched, BillingJob.IntervalInMinutes, 1);
ScheduleJob<MaintenanceUrlTriggerJob>(sched, MaintenanceUrlTriggerJob.IntervalInMinutes, 2);
我想要一些如何创建作业列表然后只运行循环....任何想法我怎么能在下面执行此操作是伪代码在这里有语法错误ScheduleJob<obj.GetType()>
var list = new List<Type>();
list.Add(typeof(BillingJob));
list.Add(typeof(MaintenanceUrlTriggerJob));
var jobId = 0;
foreach (var obj in list)
{
jobId++;
ScheduleJob<obj.GetType()>(sched, BillingJob.IntervalInMinutes, jobId);
}
答案 0 :(得分:0)
您可以这样做,但您需要使用反射来动态创建泛型类型参数。
Psuedo代码调整代码以演示技术:
var list = new List<Type>();
list.Add(typeof(BillingJob));
list.Add(typeof(MaintenanceUrlTriggerJob));
var jobId = 0;
foreach (var jobType in list)
{
jobId++;
var method = typeof(QuartzSchedulerClass).GetMethod("ScheduleJob");
var generic = method.MakeGenericMethod(jobType);
generic.Invoke(this, (Other Params));
}
Quartz的创建者可能知道这个泛型方法的用例很痛苦,并且可能有一个带有类型参数的重载:
ScheduleJob(typeof(Job), etc);
通常,为方便起见,泛型方法只是围绕它的薄包装。