gpt4 book ai didi

c# - 将 DI 与 quartz 一起使用

转载 作者:太空宇宙 更新时间:2023-11-03 12:29:08 25 4
gpt4 key购买 nike

这是我的代码,它不起作用,因为显然,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;
}
}

最佳答案

BbProcessor 实现的是 IJob 而不是 IJobDetail,这就是转换失败的原因。您可以使用接口(interface)(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 不使用您解析的类型。看看这个 unity 与 quartz 集成的项目是否能满足您的需求:https://github.com/hbiarge/Quartz.Unity

关于c# - 将 DI 与 quartz 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43506894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com