【发布时间】:2020-10-20 08:23:09
【问题描述】:
我正在使用最新版本的 Quartz.net,我也在使用 Autofac。我目前看到我的 Quartz 工作没有被触发。我得到的错误是:
System.ArgumentException:无法实例化没有空构造函数的类型
现在我相信我之前有过这个工作,可能是 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 来完成这项工作。
有人可以帮忙吗?谢谢。
【问题讨论】:
标签: c# asp.net-mvc autofac quartz-scheduler quartz.net