【发布时间】:2021-08-12 18:43:22
【问题描述】:
我们刚刚从 Quartz.Net 3.2.4 升级到 3.3.3,不幸的是,我们的一项集成测试失败了。我们正在尝试测试 Quartz 作业,测试的方式是通过 ServiceProvider 获取作业实例并调用 Execute()。
var deleteExpiredPendingFileCleanupTask = scope.ServiceProvider.GetService<DeleteExpiredPendingFileCleanupTask>();
var jobExecutionContext = new Mock<IJobExecutionContext>();
await deleteExpiredPendingFileCleanupTask.Execute(jobExecutionContext.Object);
不幸的是,Quartz.Net 似乎不再创建服务实例,GetService() 返回 null。我一直在寻找我想到的两种解决方案之一:
- 有没有办法像以前一样创建作业实例(使用 DI 等)来执行
- 有没有办法等待手动触发的作业并阻塞直到它完成
我不确定是否有我没有想到的第三种解决方案,但对于这两个,我希望有人可能有我错过的答案。我看到 this unanswered question 询问其中的第二个想法。
我找到的临时解决方案是在我们的集成测试启动中手动创建服务,但这并不理想,因为它与实际的生产配置不匹配。
services.AddScoped<DeleteExpiredPendingFileCleanupTask, DeleteExpiredPendingFileCleanupTask>();
谢谢。
【问题讨论】:
标签: c# quartz.net quartz.net-3.0