登录/注册
小张
1699
占位
2
占位
0
浏览量
占位
粉丝
占位
关注
.net core工具组件系列之Autofac—— 第二篇:Autofac的3种依赖注入方式(构造函数注入、属性注入和方法注入),以及在过滤器里面实现依赖注入
小张
2021-09-19 15:58:43 2021-09-19
106
0

 

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

前一篇跳转链接: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

方法,代表在过滤器里面实现依赖注入也是可以的。

 

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

原文: https://www.cnblogs.com/weskynet/p/15055179.html

暂无评论