更多精彩,请点击上方蓝字关注我们!关于上位机体验课你有两种选择↓:4月20日-24日晚20:00-21:30

介绍

Quartz.NET是一个方便的库,允许您通过实现IJob接口来安排重复任务。然而,它的局限性在于,默认情况下,它仅支持无参数构造函数,这使得在其内部注入外部服务变得复杂,即,用于实现存储库模式。在本文中,我们将了解如何使用标准.NET Core DI容器解决此问题。

本文中提到的整个项目在以下Github存储库中提供。为了更好地遵循文章中的代码,您可能需要查看它。

项目概况

我们来看看最初的解决方案结构。

项目QuartzDI.Demo.External.DemoService代表了一些我们无法控制的外部依赖。为了简单起见,它的工作非常简单。

项目QuartzDI.Demo是我们的工作项目,包含简单的Quartz.NET作业。

这是以直接的方式设置的:

我们通过作业的static属性提供外部服务

由于该项目是一个控制台应用程序,在本文的课程中,我们必须手动安装所有需要的基础架构,并能够更全面地了解.NET Core实际上为我们带来了什么。

此时,我们的项目正在运行。最重要的是它很简单,很棒。但是,如果我们想把它作为一个小工具,那么我们就会为这种简单性付出代价。但这通常不是生产系统的情况。所以让我们稍微调整一下以使其更灵活。

创建配置文件

其中一个缺点是我们硬编码调用到DemoJob中的URL 。理想情况下,我们希望更改它,并根据我们的环境进行更改。.NET Core附带了appsettings.json机制。

为了开始使用.NET Core配置机制,我们必须安装几个Nuget包:

让我们创建一个具有这样名称的文件并在那里提取我们的URL:

现在我们可以从配置文件中提取我们的值,如下所示:

请注意,要实现它,我们必须将Url从常量更改为属性。

使用构造函数注入

通过static属性注入服务对于一个简单的项目来说很好,但是对于一个更大的项目,它可能带来一些缺点:例如可能在没有服务的情况下调用作业,因此失败或在对象运行时期间改变依赖性,这使得更难以推理对象。要解决这些问题,我们应该使用构造函数注入。

虽然纯依赖注入没有任何问题,但是有些人认为你应该在本文中努力实现它,我们将使用Nuget包附带的内置.NET Core DI容器Microsoft.Extensions.DependencyInjection。

现在我们指定我们依赖于构造函数参数的服务:

为了调用作业的参数构造函数,Quartz.NET提供了IJobFactory接口。这是我们的实现:

让我们注册我们的依赖项:

拼图的最后一块是让Quartz.NET使用我们的工厂。IScheduler有属性JobFactory只是为了这件事。

使用选项模式

现在我们可以使用配置选项来实现相同的技巧。同样,我们的例子以Nuget包开始。这一次是Microsoft.Extensions.Options。

让我们为配置选项创建一个强类型定义:

现在我们按如下方式填充它们:

并将它们注入构造函数中。不是我们直接注入IOptions,不是options实例。

结论

在本文中,我们已经了解了如何利用.NET Core功能使Quartz.NET的使用更加灵活。

END

欢迎关注“新阁上位机编程”抖音号

不定期发布上位机实用小技巧哦

快来学习互粉呀~

(长按下方图片?保存到手机相册,打开抖音扫码关注哦!相信你肯定会)

.net 调用url接口_.NetCore中Quartz.NET的依赖注入相关推荐

  1. .NET Core中Quartz.NET的依赖注入

    目录 介绍 项目概况 创建配置文件 使用构造函数注入 使用选项模式 结论 介绍 Quartz.NET是一个方便的库,允许您通过实现IJob接口来安排重复任务.然而,它的局限性在于,默认情况下,它仅支持 ...

  2. c调用python接口_通过Python自带C/C++接口实现python与c/c++相互调用

    python的底层是c/c++,因此两种语言都有相互的接口,在以前已经写过一篇c++调用python接口让opencv中的cv::Mat类型在两种语言中相互传递,ubuntu下C++与Python混编 ...

  3. MVC3 中使用Unity实现依赖注入

    前言:前段时间一直在研究依赖注入,不过不是在MVC框架中使用,今天突然想到在MVC中使用Unity实现依赖注入,一时慌了,不知道从何下手,接着就是网上不停的找资料,下面我把我找到的资料分享下,也把我的 ...

  4. java调用easyxml接口_【技术教程】如何通过Java程序调用RTSP拉流协议视频平台EasyNVR程序接口?...

    原标题:[技术教程]如何通过Java程序调用RTSP拉流协议视频平台EasyNVR程序接口? RTSP协议视频平台EasyNVR经过多年的积累,已经是一套成熟且完善的视频平台了,用户可以通过网页直接访 ...

  5. webstorm前端调用后端接口_软件测试面试题:怎么去判断一个bug是前端问题还是后端问题...

    大家好,在软件测试面试过程中,经常有面试官问到这个问题,那我们应该如何回答才好呢?少废话,直接看答案: 答案: 在页面上发现bug之后,要想判断这个问题属于后端还是前端,我就需要来判断这个页面背后调用 ...

  6. php调用restful接口_分享一个PHP调用RestFul接口的函数

    /** * [http 调用接口函数] * @Date 2016-07-11 * @Author GeorgeHao * @param string $url [接口地址] * @param arra ...

  7. java异步调用微信接口_微信支付V3 SDK(Java版,支持同步异步调用)

    我们在开发微信支付时,发现微信官方已经对SDK做了升级,V3版本的SDK从设计上符合RESTful规范. 我们再在开源库中寻找是否有现成de开箱即用.并且支持响应式编程的SDK版本.经过一凡寻找,令我 ...

  8. php调用restful接口_如何使用PHP编写RESTful接口

    这是一个轻量级框架,专为快速开发RESTful接口而设计.如果你和我一样,厌倦了使用传统的MVC框架编写微服务或者前后端分离的API接口,受不了为了一个简单接口而做的很多多余的coding(和CTRL ...

  9. java中依赖注入_关于Java:什么是依赖注入?

    本问题已经有最佳答案,请猛点这里访问. Possible Duplicate: What is Inversion of Control? 我真的很困惑依赖注入的概念. 我对软件领域非常陌生,我对下面 ...

最新文章

  1. vim 7.4同时支持python 2.x和3.x问题调研
  2. 访问IIS元数据库失败解决方法(转)
  3. 半导体制冷器性能计算
  4. 【已解决】Could not find resource jdbc.properties
  5. 利用matlab实现SAR 图像线性拉伸显示
  6. it编年史_Java的编年史和低延迟
  7. hdu1176 免费馅饼 动态规划 二维数组实现
  8. 产品经理欲哭无泪的瞬间2(太真实了)
  9. cpu针脚测试软件,Sandsifter:一款专门针对X86处理器的模糊测试工具
  10. Spring Cloud OpenFeign 接口反序列化失效,该怎么解决?
  11. 【Linux】进程间通信之消息队列
  12. JNI/NDK入门指南之正确姿势了解JNI和NDK
  13. 基于jenkins进行定制化开发
  14. 数字图像处理王慧琴课后答案_数字图像处理课后题答案
  15. 关于JavaWeb的分页查询的实现
  16. MySQL中sum和count用法总结
  17. 博客设计展示:25个优秀博客设计
  18. 他写代码如入定,人称阿里“扫地僧,java自学教程百度云
  19. 相关系数-excel-CORREL()
  20. 什么是CC攻击?CC攻击的防御措施有哪些?

热门文章

  1. ftp定期任务linux,Linux FTP服务器搭建和crontab计划任务制定
  2. 使用while 循环实现输出 1, 2, 3, 4, 5, 7, 8, 9, 11, 12(提示:输出结果为一行,没有6和10,12后面没有逗号)
  3. Java黑皮书课后题第10章:10.4(MyPoint类)设计一个名为MyPoint的类,代表一个以x坐标和y坐标表示的点
  4. Java黑皮书课后题第8章:**8.37(猜测首府)编写一个程序,重复提示用户输入一个州的首府。当接收到用户输入后,程序报告答案是否正确。假设50个州以及它们的首府保存在一个二维数组中,提示用户回答所
  5. oracle的监听器是什么,Oracle监听器,让你监听想要的东东
  6. 《构架之美》阅读笔记三
  7. 自由群,外代数和泛包络代数
  8. 管理你的代码——Git学习(一)
  9. unity实现一个物体绕着某点旋转
  10. Unity中的值传递与引用传递