【发布时间】:2014-11-27 17:23:29
【问题描述】:
我正在试用 Quartz.net,我将有许多非常相似的任务,并且希望我不必输入全部内容
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("job1", "group1")
.Build();
每次都说鬼话。所以我想我会尝试让我的工作都继承自一个强制他们拥有某些数据的基础工作,例如
abstract public class BaseJob : IJob
{
public static abstract string Name { get; }
public void Execute(IJobExecutionContext context)
{
//Calls an abstract method that does the actual work with some wrapping stuff around it
}
}
现在假设我实现了从 BaseJob 继承的 Job1 和 Job2 类,我可以这样做:
List<IJobDetail> Jobs = new List<IJobDetail>();
Jobs.Add(JobBuilder.Create<Job1>()
.WithIdentity(Job1.Name, "group1")
.Build());
Jobs.Add(JobBuilder.Create<Job2>()
.WithIdentity(Job2.Name, "group1")
.Build());
但我想重构它,这样我就可以创建一个 List<BaseJob> JobList,然后在某个地方填充它,然后在 foreach 循环中填充 Jobs。这可能吗,因为JobBuilder.Create<>() 是一种通用方法?如果这是正确的术语(即<> 中的位),我如何使用变量指定类型?
我尝试使用typeof 无济于事,例如(注意这只是在一个元素上,但如果迭代则基本相同)
Jobs.Add(JobBuilder.Create<typeof(JobList[0])>()
.WithIdentity(JobList[0].Name, "group1")
.Build()))
我什至尝试将JobList 设为List<Type> 然后
Jobs.Add(JobBuilder.Create<JobList[0]>()
.WithIdentity(JobList[0].Name, "group1")
.Build()))
但这也不好。有没有办法做到这一点?反射可以在这里提供帮助吗?
【问题讨论】:
标签: c# generics reflection refactoring quartz.net