.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
方法,代表在过滤器里面实现依赖注入也是可以的。
以上就是本篇文章的全部内容,谢谢观看。