本篇文章接前一篇,建议可以先看前篇文章,再看本文,会有更好的效果。

前一篇跳转链接:https://www.cnblogs.com/weskynet/p/15046999.html

正文:

Autofac通过构造函数注入

如前一篇所示,获取实例都是通过构造函数进行。此处通过构造函数获取实例,还有一种通过构造函数传入IServiceProvider进行获取。该方法可以极大减少构造函数传入的实例过多所导致的构造函数参数臃肿。示例直接使用前篇项目做拓展,在控制器的测试api下面,直接使用。有关示例如下图所示:

设置断点,并运行程序查看效果。可见IWeskyTest接口已经被注入进来,并且可以访问到

Autofac通过属性注入方式

在ServiceA实现类里面,添加IServiceB、IServiceC的属性。并且在ServiceA实现类里面,添加一个测试方法 Hey(),在里面对以上两个属性所对应的接口方法进行调用。代码如下:

以及Hey需要加入到抽象类接口IServiceA:

对IServiceA\B\C进行服务注册。其中,提供属性的服务,注册时候必须使用PropertiesAutowired方式,如下面代码所示:

接着改写控制器里面的Test方法进行测试。对应代码以及解释和对应的运行结果如下图所示:

Autofac通过方法注入方式

改写上面ServiceA的类为如下代码。有关代码说明如图:

对用到的IServiceA和B进行服务注册。如图所示,ServiceA里面提供了方法注入,所以需要在注册A服务的时候,使用OnActivated方法。其中,RegisterService是ServiceA服务里面提供的需要当做方法注入的方法,方法里面的IServiceB是需要被方法注入的抽象类(接口)。以下使用了瞬时,也可以使用其他的,没有限制,包括ServiceB服务注册时候,也可以使用非单例模式,不做限制。

运行程序,如果先后打印ServiceA 和 ServiceB,则代表方法注入成功。运行程序结果如下:

Filter过滤器里面实现支持依赖注入

先编写一个过滤器WeskyFilter,继承自 ActionFilterAttribute。并且在里面添加一个属性注入的IServiceC和一个构造函数注入的IServiceD。

然后在OnActionExecuting和OnActionExecuted方法下面实现一个打印的内容,并且分别打印ServiceC实例和ServiceD实例下面的Hello方法。代码如下:

对IServiceC、D进行服务注册,以及注册WeskyFilter过滤器,用以支持依赖注入:

在控制器里面的Test方法上面,添加过滤器标记,并直接运行进行结果验证:

如图所示,打印出过滤器里面的内容,并且成功访问到了ServiceC和D的Hello方法,代表在过滤器里面实现依赖注入也是可以的。

以上就是本篇文章的全部内容,谢谢观看。

.net core番外第2篇:Autofac的3种依赖注入方式(构造函数注入、属性注入和方法注入),以及在过滤器里面实现依赖注入的更多相关文章

  1. .net core番外第一篇:Autofac的几种常见注入方式、生命周期和AOP

    使用Autofac进行服务注册实践: 新建三个项目,分别是webapi项目 Wesky.Core.Autofac以及两个类库项目 Wesky.Core.Interface和Wesky.Core.Ser ...

  2. WEB安全番外第四篇--关于SQL盲注

    一.SQL盲注: 看不到回显的,无法从返回直接读取到数据库内容的对数据的猜解,属于盲注. 二.第一种--基于布尔类型的盲注: 这种很简单,最典型的例子,就是挖SQL注入的时候常用的: ''' http ...

  3. Python之路番外(第三篇):Pycharm的使用秘籍

    版本:Pycharm2017.3.4Professional Edition 一.Pycharm的基本使用1.在Pycharm下为你的python项目配置python解释器 file --settin ...

  4. WEB安全番外第六篇--关于通过记录渗透工具的Payload来总结和学习测试用例

    背景: 在WEB安全的学习过程中,了解过了原理之后,就是学习各种Payload,这里面蕴藏着丰富的知识含量,是在基本上覆盖了漏洞原理之后的进一步深入学习的必经之路.无理是Burpsuite还是Sqlm ...

  5. WEB安全番外第五篇--关于使用通配符进行OS命令注入绕WAF

    一.通配符简介: 一般来讲,通配符包含*和?,都是英文符号,*用来匹配任意个任意字符,?用来匹配一个任意字符. 举个例子使用通配符查看文件,可以很名下看到打卡的文件是/etc/resolv.conf: ...

  6. WEB安全番外第三篇--关于XXE

    一.什么是XXE 1.XML实体简介 (1)在一段时间中,XML都是WEB信息传输的主要方法,时至今日XML在WEB中作为前后台之间传递数据的结构,依然发挥着重要的作用.在XML中有一种结构叫做实体: ...

  7. 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV

    这次博客园的排版彻底残了..高清版请移步: https://zhuanlan.zhihu.com/p/24425116 本篇是前面两篇教程: 给深度学习入门者的Python快速教程 - 基础篇 给深度 ...

  8. [uboot] (番外篇)uboot串口&console&stdio设备工作流程 (转)

    [uboot] uboot流程系列:[project X] tiny210(s5pv210)上电启动流程(BL0-BL2)[project X] tiny210(s5pv210)从存储设备加载代码到D ...

  9. [uboot] (番外篇)uboot 驱动模型(转)重要

    [uboot] uboot流程系列:[project X] tiny210(s5pv210)上电启动流程(BL0-BL2)[project X] tiny210(s5pv210)从存储设备加载代码到D ...

随机推荐

  1. 在OpenShift平台上验证NVIDIA DGX系统的分布式多节点自动驾驶AI训练

    在OpenShift平台上验证NVIDIA DGX系统的分布式多节点自动驾驶AI训练 自动驾驶汽车的深度神经网络(DNN)开发是一项艰巨的工作.本文验证了DGX多节点,多GPU,分布式训练在DXC机器 ...

  2. switch分支语句

    语句句式 Calendar c = Calendar.getInstance(); //获得一周的某天 int i = c.get(Calendar.DAY_OF_WEEK); switch (i) ...

  3. jsp页面抽取

    步骤: 1.先将jsp中要抽取的公共部分剪切出来,黏贴到新的jsp文件中,取名叫xxx.jsp 2.在需要引入此公共部分的jsp页面中使用<%@include file="xxx.js ...

  4. 查找文件与cron计划任务

    查找文件 • 根据预设的条件递归查找对应的文件 find [目录] [条件1] [-a|-o] [条件2] ... -type  类型(f文件.d目录.l快捷方式) -name  "文档名称 ...

  5. UF_DRAW 制图操作

    Open C uc6476uc6477uc6478uc6479uc6480uc6481uc6482uc6483uc6484uc6485uc6486uc6488uc6489uc6492uc6494uc6 ...

  6. 【Azure 机器人】微软Azure Bot 编辑器系列(5) : 机器人的卡片式回复 (The Bot Framework Composer tutorials)

    欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人. 在该系列文章中,每一篇都将通过添加更多的功能来构建机器人.当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather ...

  7. 2021Qt打包发布教程

    因为最近写了一个程序,然后想着能给室友玩耍,就研究了一下如何打包,写这篇博客记录一下 1. 首先获得程序的Release版本 就是点击这个Release,然后构建一遍 2. 进入构建的release文 ...

  8. 第15章: Prometheus监控Kubernetes资源与应用

    Prometheus监控Kubernetes资源与应用 目录 1 监控方案 2 2 监控指标 4 3 实现思路 4 4 在K8S中部署Prometheus 4 5 在K8S中部署Grafana与可视化 ...

  9. 20、oralce中单引号和双引号的区别

    20.oralce中单引号和双引号的区别: 20.1.单引号和双引号oracle都支持,但是两者是有区别的: 20.2.双引号在 Oracle 中的作用: 1.双引号的作用是:假如建立对象的时候,对象 ...

  10. 个人使用uploadify插件遇到的一些问题

    当uploadify上传插件遇到的好几个问题 现在开始自我反省,留下脚印希望能够帮助其他遇到同样问题的朋友. 我遇到的第一个是, 在firefox不能执行uploadify事件onUploadSucc ...