这是我的代码并且它无法正常工作,因为显然需要使用作业构建器创建IJobDetails
。有没有办法在构造函数中创建具有外部依赖关系的Job?
var container = new UnityContainer();
container.RegisterType<BbProcessor, BbProcessor>();
IJobDetail jobProcessor = container.Resolve<BbProcessor>() as IJobDetail;
// construct a scheduler factory
ISchedulerFactory schedFact = new StdSchedulerFactory();
// get a scheduler
IScheduler sched = schedFact.GetScheduler();
sched.Start();
ITrigger trigger = TriggerBuilder.Create()
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(10)
.RepeatForever())
.Build();
sched.ScheduleJob(jobProcessor , trigger);
演员阵容很糟糕,但这只是我尝试做的一个例子(BbProcessor
是给构造函数和我想做的工作依赖的类。)
public class BbProcessor : IJob
{
private readonly Repository _repository;
public BbProcessor(Repository Repository)
{
_repository = Repository;
}
}
答案 0 :(得分:1)
BbProcessor实现IJob而不是IJobDetail,这就是强制转换失败的原因。您可以使用界面(see here)向Unity注册BbProcessor类,但这不是您真正想要的:
var container = new UnityContainer();
container.RegisterType<IJob, BbProcessor>();
IJob jobProcessor = container.Resolve<IJob>();
实际上,BbProcessor必须有一个无参数构造函数。 See Documentation. 另外,look here有关设置工作的完整示例。
您可以像这样创建一个IJobDetail:
IJobDetail job = JobBuilder.Create<BbProcessor>().WithIdentity("Job BB","Group BB").Build();
JobBuilder不使用已解析的类型。看看这个统一与石英相结合的项目能否为您提供以下内容:https://github.com/hbiarge/Quartz.Unity
答案 1 :(得分:0)
这篇文章给了我答案https://stackoverflow.com/a/13857396/4350808(我将同一个实例传递给JobDataMap创建的作业)