首页 > 解决方案 > Quartz 作业不能使用 autofac 和带有服务的构造函数运行

问题描述

我有如下所示的石英作业

    public class ExtractTradesJob: IJob
    {
        private ITradeExtractor _tradeExtractor;

        public ExtractTradesJob(ITradeExtractor tradeExtractor)
        {
            _tradeExtractor = tradeExtractor;
        }


        public async Task GetTradesAsync(DateTime dateTime)
        {
            Console.WriteLine(dateTime);
        }

        void IJob.Execute(IJobExecutionContext context)
        {
            Task.Run(async () => await GetTradesAsync(DateTime.Now));
        }
    }

我有 2 个问题

  1. 由于我需要使用 .NET 4.5,开箱即用的异步支持不可用,所以我用来调用异步方法的方法是否正确?
  2. 好像我有一个构造函数,就像我的情况一样,这项工作不会触发。我已经检查并且知道 ITradeExtractor 服务已正确注册。那么我怎样才能有一份在其构造函数中接受服务的工作呢?如果我删除构造函数,我的 Execute 方法会被正确调用

我正在使用 AutoFac 3.5.2 和 Quartz 2.6.2 和 AutoFac.Extras.Quartz 3.5.0

我正在使用下面的代码来设置 AutoFac

        public static void RegisterWithAutofac(ContainerBuilder builder)
        {
            builder.RegisterType<TradeExtractor>()
                .As<ITradeExtractor>()
                .SingleInstance();

            builder.Register(x => new StdSchedulerFactory().GetScheduler()).As<IScheduler>();


        }

我知道这些是旧包,但我必须使用 .NET 4.5 的限制意味着这超出了我的控制范围

保罗

标签: c#autofacquartz-schedulerquartz.netquartz

解决方案


推荐阅读