.net core工具组件系列之Autofac—— 第二篇:Autofac的3种依赖注入方式(构造函数注入、属性注入和方法注入),以及在过滤器里面实现依赖注入

简介: 本篇文章接前一篇,建议可以先看前篇文章,再看本文,会有更好的效果。前一篇跳转链接:https://www.cnblogs.com/weskynet/p/15046999.html


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

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

 

正文:


Autofac通过构造函数注入


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

1995789-20210724143424839-621984367.png

 

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

1995789-20210724143435737-1116824891.png

 

Autofac通过属性注入方式


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


1995789-20210724143552147-71354978.png

 

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


1995789-20210724143604328-713150951.png


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


1995789-20210724143621764-2016401507.png


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


1995789-20210724143631736-1087272780.png


Autofac通过方法注入方式


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


1995789-20210724143709485-1331559053.png

 

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


1995789-20210724143723123-745372252.png


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


1995789-20210724143738090-1560833391.png


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

 


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


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


1995789-20210724143803105-879327508.png


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


1995789-20210724143816519-1251675614.png


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


1995789-20210724143827125-636113713.png

 

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

 

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


目录
相关文章
|
4月前
|
开发框架 .NET C#
ASP.NET Core Blazor 路由配置和导航
大家好,我是码农刚子。本文系统介绍Blazor单页应用的路由机制,涵盖基础配置、路由参数、编程式导航及高级功能。通过@page指令定义路由,支持参数约束、可选参数与通配符捕获,结合NavigationManager实现页面跳转与参数传递,并演示用户管理、产品展示等典型场景,全面掌握Blazor路由从入门到实战的完整方案。
387 6
|
11月前
|
Shell 网络安全 C#
一款 .NET 开源、功能强大的远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议!
一款 .NET 开源、功能强大的远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议!
370 4
|
9月前
|
缓存 开发框架 .NET
一个功能丰富的 .NET 工具库 XiHan.Framework.Utils
XiHan.Framework.Utils 是一个功能全面的 .NET 工具库,包含字符串处理、集合扩展、加密解密、分布式 ID、文件操作、缓存、线程、国际化等模块。设计上注重高内聚、低耦合,适用于各类 .NET 应用开发。支持 AES 加密、树形结构转换、分页过滤、日志输出等功能,提供简单易用的 API。可通过 NuGet 快速安装,源码开放,采用 MIT 协议。
332 56
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:<https://github.com/khellang/Scrutor>
382 5
|
8月前
|
存储 缓存
.NET 6中Startup.cs文件注入本地缓存策略与服务生命周期管理实践:AddTransient, AddScoped, AddSingleton。
记住,选择正确的服务生命周期并妥善管理它们是至关重要的,因为它们直接影响你的应用程序的性能和行为。就像一个成功的建筑工地,工具箱如果整理得当,工具选择和使用得当,工地的整体效率将会大大提高。
308 0
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
324 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
XML C# 数据格式
一个.NET开源、免费、功能强大的 PDF 处理工具
一个.NET开源、免费、功能强大的 PDF 处理工具
492 8
|
网络协议 C#
基于.NET WinForm开发的一款硬件及协议通讯工具
基于.NET WinForm开发的一款硬件及协议通讯工具
170 7
|
C# UED
一个.NET开源、易于使用的屏幕录制工具
一个.NET开源、易于使用的屏幕录制工具
175 6
|
Web App开发 C# Windows
一款.NET开源的Windows资源管理器标签页工具
一款.NET开源的Windows资源管理器标签页工具
225 5