.net 调用url接口_.NetCore中Quartz.NET的依赖注入
介绍
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的依赖注入相关推荐
- .NET Core中Quartz.NET的依赖注入
目录 介绍 项目概况 创建配置文件 使用构造函数注入 使用选项模式 结论 介绍 Quartz.NET是一个方便的库,允许您通过实现IJob接口来安排重复任务.然而,它的局限性在于,默认情况下,它仅支持 ...
- c调用python接口_通过Python自带C/C++接口实现python与c/c++相互调用
python的底层是c/c++,因此两种语言都有相互的接口,在以前已经写过一篇c++调用python接口让opencv中的cv::Mat类型在两种语言中相互传递,ubuntu下C++与Python混编 ...
- MVC3 中使用Unity实现依赖注入
前言:前段时间一直在研究依赖注入,不过不是在MVC框架中使用,今天突然想到在MVC中使用Unity实现依赖注入,一时慌了,不知道从何下手,接着就是网上不停的找资料,下面我把我找到的资料分享下,也把我的 ...
- java调用easyxml接口_【技术教程】如何通过Java程序调用RTSP拉流协议视频平台EasyNVR程序接口?...
原标题:[技术教程]如何通过Java程序调用RTSP拉流协议视频平台EasyNVR程序接口? RTSP协议视频平台EasyNVR经过多年的积累,已经是一套成熟且完善的视频平台了,用户可以通过网页直接访 ...
- webstorm前端调用后端接口_软件测试面试题:怎么去判断一个bug是前端问题还是后端问题...
大家好,在软件测试面试过程中,经常有面试官问到这个问题,那我们应该如何回答才好呢?少废话,直接看答案: 答案: 在页面上发现bug之后,要想判断这个问题属于后端还是前端,我就需要来判断这个页面背后调用 ...
- php调用restful接口_分享一个PHP调用RestFul接口的函数
/** * [http 调用接口函数] * @Date 2016-07-11 * @Author GeorgeHao * @param string $url [接口地址] * @param arra ...
- java异步调用微信接口_微信支付V3 SDK(Java版,支持同步异步调用)
我们在开发微信支付时,发现微信官方已经对SDK做了升级,V3版本的SDK从设计上符合RESTful规范. 我们再在开源库中寻找是否有现成de开箱即用.并且支持响应式编程的SDK版本.经过一凡寻找,令我 ...
- php调用restful接口_如何使用PHP编写RESTful接口
这是一个轻量级框架,专为快速开发RESTful接口而设计.如果你和我一样,厌倦了使用传统的MVC框架编写微服务或者前后端分离的API接口,受不了为了一个简单接口而做的很多多余的coding(和CTRL ...
- java中依赖注入_关于Java:什么是依赖注入?
本问题已经有最佳答案,请猛点这里访问. Possible Duplicate: What is Inversion of Control? 我真的很困惑依赖注入的概念. 我对软件领域非常陌生,我对下面 ...
最新文章
- vim 7.4同时支持python 2.x和3.x问题调研
- 访问IIS元数据库失败解决方法(转)
- 半导体制冷器性能计算
- 【已解决】Could not find resource jdbc.properties
- 利用matlab实现SAR 图像线性拉伸显示
- it编年史_Java的编年史和低延迟
- hdu1176 免费馅饼 动态规划 二维数组实现
- 产品经理欲哭无泪的瞬间2(太真实了)
- cpu针脚测试软件,Sandsifter:一款专门针对X86处理器的模糊测试工具
- Spring Cloud OpenFeign 接口反序列化失效,该怎么解决?
- 【Linux】进程间通信之消息队列
- JNI/NDK入门指南之正确姿势了解JNI和NDK
- 基于jenkins进行定制化开发
- 数字图像处理王慧琴课后答案_数字图像处理课后题答案
- 关于JavaWeb的分页查询的实现
- MySQL中sum和count用法总结
- 博客设计展示:25个优秀博客设计
- 他写代码如入定,人称阿里“扫地僧,java自学教程百度云
- 相关系数-excel-CORREL()
- 什么是CC攻击?CC攻击的防御措施有哪些?
热门文章
- ftp定期任务linux,Linux FTP服务器搭建和crontab计划任务制定
- 使用while 循环实现输出 1, 2, 3, 4, 5, 7, 8, 9, 11, 12(提示:输出结果为一行,没有6和10,12后面没有逗号)
- Java黑皮书课后题第10章:10.4(MyPoint类)设计一个名为MyPoint的类,代表一个以x坐标和y坐标表示的点
- Java黑皮书课后题第8章:**8.37(猜测首府)编写一个程序,重复提示用户输入一个州的首府。当接收到用户输入后,程序报告答案是否正确。假设50个州以及它们的首府保存在一个二维数组中,提示用户回答所
- oracle的监听器是什么,Oracle监听器,让你监听想要的东东
- 《构架之美》阅读笔记三
- 自由群,外代数和泛包络代数
- 管理你的代码——Git学习(一)
- unity实现一个物体绕着某点旋转
- Unity中的值传递与引用传递