问题描述
我正在使用最新版本的Quartz.net,也正在使用Autofac。我目前看到我的Quartz作业没有被触发。我得到的错误是:
现在,我相信我以前曾做过这项工作,这可能是autofac或quartz软件包升级的结果。但是不确定。
我的IOC容器的配置如下:
builder.RegisterModule(new QuartzAutofacFactoryModule());
builder.RegisterModule(new QuartzAutofacJobsModule(Assembly.GetExecutingAssembly()));
builder.RegisterModule(new QuartzAutofacFactoryModule(MatchingScopeLifetiMetags.RequestLifetimeScopeTag.ToString()));
builder.RegisterType<JobScheduler>().AsSelf().InstancePerRequest();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
using (var scope = container.BeginLifetimeScope(MatchingScopeLifetiMetags.RequestLifetimeScopeTag))
{
var scheduler = scope.Resolve<JobScheduler>();
scheduler.Start();
}
我的工作计划程序:
public class JobScheduler
{
public JobScheduler(IScheduler scheduler)
{
_scheduler = scheduler;
}
public void Start()
{
var job = JobBuilder.Create<SomeJob>()
.WithIdentity("MyJob","MyJobGroup")
.Build();
var trigger = TriggerBuilder.Create()
.WithIdentity("MyJobTrigger","MyJobGroup")
.StartAt(DateTimeOffset.Now.AddMinutes(1))
.WithSimpleSchedule(x => x
.WithIntervalInMinutes(2)
.RepeatForever()
.WithMisfireHandlingInstructionNextWithRemainingCount()
)
.Build();
_scheduler.ScheduleJob(job,trigger);
_scheduler.Start();
}
}
我的工作是:
public class SomeJob: IJob
{
public ISomedependency _dependency;
public SomeJob(ISomedependency dependency)
{
_dependency = dependency;
}
public async Task Execute(IJobExecutionContext context)
{
await _dependency.DoWork();
}
}
请记住,可能我可以为SomeJob
创建一个无参数的构造函数,但是那样我将无法使用_dependency
来完成工作。
有人可以帮忙吗?谢谢。
解决方法
问题似乎出在Quartz或Autofac.Extras.Quartz上。将在github上报告。请查看屏幕截图。