首页

Topshelf + Quartz + StructureMap搭配

Topshelf,Quartz,StructureMap这三个.net组件一直都有用。但是将他们用在一个项目中,这还是第一次。虽然现在.net core已经升级到2.1了,但是还是有很多的项目都还在用.net 4.5的框架,不能升级,而.net 4.5的控制台应用程序,没法自己宿主和依赖注入,得依赖Topshelf和StructureMap等等组件,而.net core 2.1可以自己宿主,同时还支持依赖注入,我将在稍后的文章中介绍.net core 宿主的Jobs。

当我们要一个全新的项目,比如数据报表的一个任务,每天从生产环境拉取数据生成各种报表,而我们手上又没有Linux服务器,要做这样的一个Job,我们当然很容易想到用Topshelf来做一个windows服务,用Quartz来做任务调度,如果我们还有点追求,要把项目的架构做的更好点,那么IOC/DI也得引入,我们知道在.net 4.5中,官方是没有自己的解决方案,所以我们选择了StructureMap。

nuget上已经有人将这三个组件打包成一个下载包,Topshelf.Quartz.StructureMap,官方地址:https://github.com/swimtver/Topshelf.StructureMap,上面的入门文档也非常简单,容易上手,甚至直接copy文档代码,基本上就能跑。但是我为什么还要写这个博客呢,就是对它再做一点点的完善。

1. 纠正一个错误
官方文档里面有一个地方错误,与Quartz相关,IJob接口并没有一个void Execute(IJobExecutionContext context)方法

再看看Quartz的IJob接口,void应该是Task,然后方法里面做相应的修改,见我下面的源码


2. 优化一个依赖注入

如上图所以,添加红色框标注的内容,这几行代码可以使得你无需配置接口与实现之间的映射关系。

3. 添加部署的windows服务名

我们可以将它安装成windows服务,使用命令:xxxx(编译项目完生生成的启动文件).exe install,然后你就可以在服务里面看见一个叫myjob的服务。我把这个demo的代码截图贴出,然后大家还可以到本文最下面地址下载源码。







总结:工欲善其事必先利其器,拿来主义,减少我们不少的工作量,何乐不为呢?本文源码:https://github.com/iissy/TopshelfQuartzStructureMap
from 爱施园
Posted by 森林 on 2018/07/31
Copyright ©2018 爱施园 粤ICP备14091834号