问题:

使用 Quartz.Net 做定时任务时,实现IJob对象的服务,Autofac不会自动注入,使用构造函数会直接出现异常,无法执行Execute方法。

解决方式

方法一: 使用 Autofac的Quartz.Net的扩展包

Gitbub地址:  https://github.com/alphacloud/Autofac.Extras.Quartz

 使用方法:

1、需要下载Autofac的扩展包,可以通过Nuget包管理工具下载
Autofac.Extras.Quartz
2、在Autofac配置文件中注册Quartz模块
 //注册定时任务模块
builder.RegisterModule(new QuartzAutofacFactoryModule());
builder.RegisterModule(new QuartzAutofacJobsModule(typeof(JobTest).Assembly));

3、然后在Job任务对象中,就可以通过构造函数注入服务对象。
方法二:
因我本机的项目使用的Autofac是3.5版本,如果安装Autofac.Extras.Quartz,需要升级Autofac版本,要么用很旧的版本,方法一并不友好。
首先,在mvc根目录下新建Autofac扩展类:
 1   internal static  class AutofacExt
 2     {
 3         private static IContainer _container;
 4         public static void InitAutofac()
 5         {
 6             var builder = new ContainerBuilder();
 7
 8             //注册数据库基础操作和工作单元
 9             builder.RegisterGeneric(typeof(BaseRepository<>)).As(typeof(IRepository<>));
10             builder.RegisterType(typeof (UnitWork)).As(typeof (IUnitWork));
11
12             //注册WebConfig中的配置
13             builder.RegisterModule(new ConfigurationSettingsReader("autofac"));
14
15             //注册app层
16             builder.RegisterAssemblyTypes(Assembly.GetAssembly(typeof (UserManagerApp)));
17
18             //注册领域服务
19             builder.RegisterAssemblyTypes(Assembly.GetAssembly(typeof(AuthoriseService)));
20
21                 // Register your MVC controllers.
22             builder.RegisterControllers(typeof(MvcApplication).Assembly);
23
24             // OPTIONAL: Register model binders that require DI.
25             builder.RegisterModelBinders(Assembly.GetExecutingAssembly());
26             builder.RegisterModelBinderProvider();
27
28             // OPTIONAL: Register web abstractions like HttpContextBase.
29             builder.RegisterModule<AutofacWebTypesModule>();
30
31             // OPTIONAL: Enable property injection in view pages.
32             builder.RegisterSource(new ViewRegistrationSource());
33
34             // OPTIONAL: Enable property injection into action filters.
35             builder.RegisterFilterProvider();
36
37             // Schedule
38             builder.Register(x => new StdSchedulerFactory().GetScheduler()).As<IScheduler>();
39
40             // Schedule jobs
41             builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).Where(x => typeof(IJob).IsAssignableFrom(x));
42
43             // Set the dependency resolver to be Autofac.
44             _container = builder.Build();
45             DependencyResolver.SetResolver(new AutofacDependencyResolver(_container));
46
47             IScheduler sched = AutofacExt.GetFromFac<IScheduler>();
48             sched.JobFactory = new AutofacJobFactory(_container);
49
50
51             IJobDetail job = JobBuilder.Create<TimeJob>()
52                     .WithIdentity("job1", "group1")
53                     .Build();
54
55             ITrigger trigger = TriggerBuilder.Create()
56                 .WithIdentity("1JobTrigger")
57                 .WithSimpleSchedule(x => x
58                     .RepeatForever()
59                     .WithIntervalInSeconds(5)
60                 )
61                 .StartNow()
62                 .Build();
63
64             sched.ScheduleJob(job, trigger);
65             sched.Start();
66         }
67
68         /// <summary>
69         /// 从容器中获取对象
70         /// </summary>
71         /// <typeparam name="T"></typeparam>
72         public static T GetFromFac<T>()
73         {
74             return _container.Resolve<T>();
75         }
76     }

 1    public class AutofacJobFactory : IJobFactory
 2     {
 3         private readonly IContainer _container;
 4         public AutofacJobFactory(IContainer container)
 5         {
 6             _container = container;
 7         }
 8         public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
 9         {
10             return (IJob)_container.Resolve(bundle.JobDetail.JobType);
11         }
12
13         public void ReturnJob(IJob job)
14         {
15
16         }
17     }

[DisallowConcurrentExecution]public class TimeJob : IJob{private LogManagerApp logManager;public TimeJob(){logManager = AutofacExt.GetFromFac<LogManagerApp>();}public void Execute(IJobExecutionContext context){//
        }}

TimeJob

在Application_Start()里添加这段代码即可:  AutofacExt.InitAutofac();

 AutofacExt.InitAutofac();

参考资料:

Quartz.Net 与 Autofac 自动注入 的整合问题

如何创建一个Quartz.NET的工作,需要注射autofac

转载于:https://www.cnblogs.com/riddly/p/7976679.html

如何创建一个Quartz.NET的工作,需要注射autofac相关推荐

  1. [日常工作]偷懒创建一个存储过程进行模拟工作.

    create procedure rpadurabletest AS declare @a bigINT set @a=1 while @a<1000 begin INSERT INTO RPA ...

  2. 在ASP.NET Core中创建基于Quartz.NET托管服务轻松实现作业调度

    在这篇文章中,我将介绍如何使用ASP.NET Core托管服务运行Quartz.NET作业.这样的好处是我们可以在应用程序启动和停止时很方便的来控制我们的Job的运行状态.接下来我将演示如何创建一个简 ...

  3. android 锁屏应用,创建一个Android锁屏应用。

    小编典典 是的,有可能. 这是来自GitHub 的简单锁屏源代码 创建一个像锁一样工作的应用程序没什么大不了的,但是正如您在谈到Home键问题时所说的,我建议您继续开发并尽可能多地开发该应用程序,唯一 ...

  4. 操作系统:为什么IO操作不占用CPU却会导致进程阻塞?Web服务器每接收一个请求都会创建一个新的线程吗?Tomcat服务器工作原理?

    为什么IO操作不占用CPU却会导致进程阻塞?Web服务器每接收一个请求都会创建一个新的线程吗?这两个问题在我学操作系统以前我都挺困惑的.现在我来尝试着解答一下. 1. 为什么IO操作不占用CPU却会导 ...

  5. DAX CountX+RelatedTable实战:帮助HR妹子创建一个工作日历表

    之前介绍过用M语言创建自增长日历,这个日历属于单纯的自增长日历,适用于与对日期时间没有特殊差别的统计报表使用.但是对于HR妹子,她们要统计加班记录,往往就需要知道是否有员工在周末或休息时间也去上班了, ...

  6. 如何创建一个基础jQuery插件

    如何创建一个基础插件 How to Create a Basic Plugin 有时你想使一块功能性的代码在你代码的任何地方有效.比如,也许你想调用jQuery对象的一个方法,对该对象进行一系列的操作 ...

  7. 学习在Unity中创建一个动作RPG游戏

    游戏开发变得简单.使用Unity学习C#并创建您自己的动作角色扮演游戏! 你会学到什么 学习C#,一种现代通用的编程语言. 了解Unity中2D发展的能力. 发展强大的和可移植的解决问题的技能. 了解 ...

  8. Unity与C#创建一个3D平台游戏 Learn to Create a 3D Platformer Game with Unity C#

    游戏开发变得容易了.使用Unity学习C#并创建您自己的3D平台! 你会学到什么 学习现代通用编程语言C#. 了解Unity中3D开发的功能 发展强大的可转移的解决问题的技能 了解游戏开发过程 了解面 ...

  9. 用Unity和Playmaker创建一个限时游戏 Creating a Time Limit game with Unity and Playmaker

    本课程结束时,您将拥有在Unity中使用Playmaker创建游戏的工具 你会学到: playmaker状态的基础以及它们如何与动作一起工作. 安装悬停车,可以在竞技场内行驶. 不同力度的射击地雷驱动 ...

最新文章

  1. DGL RDKit | 基于Attentive FP可视化训练模型原子权重
  2. 实验三 编程、编译、连接、跟踪
  3. php面向对象封装mysql_php mysqli面向对象封装mysql数据库常用操作
  4. 可视化篇(二)———使用matplotlib绘制常用3D图形及案例
  5. ajax 示例代码,Ajax的简单实用实例代码
  6. python中df head_10招!看骨灰级Pythoner如何玩转Python
  7. 转:Fiddler抓包工具总结
  8. Framework学习(三)之PMS、AMS、WMS
  9. mysql导出excel出乱码_Mysql中文乱码以及导出为sql语句和Excel问题解决方法[图文]...
  10. C语言基础知识:printf的输出格式
  11. java 文件名乱码_详解关于java文件下载文件名乱码问题解决方案
  12. ThreadLocal
  13. 最适合程序员的画图工具?
  14. omnet++tictoc2案例解析
  15. 《我的世界》Minecraft私服搭建100%成功
  16. openwrt运行n2n服务器,Windows下使用N2N搭建局域网,全球局域网(重写)
  17. threejs学习第一天--3D地月环绕实战案例
  18. 你有旧iPhone吗?快来瓜分苹果1800万赔偿款!
  19. 我越脱俗,就会越世俗
  20. OJ笔记 18939 最长单词

热门文章

  1. linux命令执行的通过程,Linux下shell命令执行过程简介
  2. python123程序设计题答案第三周_Python 3 程序设计学习指导与习题解答
  3. umts是移动还是联通_联通与电信合建5G:核心网各自建设 5G频率资源共享
  4. c# image转换为bitmap,C# - 转换WPF Image.source到System.Drawing.Bitmap
  5. python面向对象编程指南 脚本之家_python对象及面向对象技术详解
  6. dup java_java web----TCP/DUP 通信
  7. go语言 gosched
  8. C++ 构造函数和析构函数
  9. opencv Harris角检测
  10. CentOS7没有telnet命令的解决方法