【问题标题】:Quartz says Cannot instantiate type which has no empty constructorQuartz 说不能实例化没有空构造函数的类型
【发布时间】: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


    【解决方案1】:

    问题似乎出在 Quartz 或 Autofac.Extras.Quartz 上。将在 github 上报告。请看截图。

    Screenshot

    【讨论】:

      猜你喜欢
      • 2013-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 2013-09-27
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      相关资源
      最近更新 更多