.NET Core开发实战(第5课:依赖注入:良好架构的起点)--学习笔记(下)
05 | 依赖注入:良好架构的起点
注册完毕之后,想替换某些组件的某些部分时,可以使用 Replace 和 RemoveAll
services.AddSingleton<IOrderService>(new OrderService());
services.Replace(ServiceDescriptor.Singleton<IOrderService, OrderServiceEx>());// 替换掉注册的第一个实现
启动程序,输出如下:
获取到服务实例:DependencyInjectionDemo.Services.OrderServiceEx:25560520
从结果看出,注册的 OrderService 被替换为 OrderServiceEx
下面介绍 RemoveAll
services.AddSingleton<IOrderService>(new OrderService());
services.AddSingleton<IOrderService, OrderServiceEx>();
services.RemoveAll<IOrderService>();// 移除所有 IOrderService 的注册
这种情况下程序会报错,因为所有 IOrderService 的注册被移除
Unable to resolve service for type 'DependencyInjectionDemo.Services.IOrderService'
下面介绍如何注册泛型模板
当需要注册一组泛型实现的时候
实际上注册的时候并不知道泛型类的具体类型入参
依赖注入框架为我们提供了泛型模板的注册方式
通过一行代码来注册所有此泛型的具体实现
定义一个泛型接口
namespace DependencyInjectionDemo.Services
{public interface IGenericService<T>{}public class GenericService<T> : IGenericService<T>{public T Data { get; private set; }public GenericService(T data){this.Data = data;}}
}
泛型模板注册方法
services.AddSingleton(typeof(IGenericService<>), typeof(GenericService<>));
它的生命周期与之前的注册方式是一致的
不过它无法通过泛型 API 注册
需要注册两个 service 的 type
第一个入参是服务的类型
第二个入参是服务实现的类型
接下来,看看如何在 controller 中使用
// 在构造函数中添加两个入参,IOrderService 和 IGenericService
// 通过断点调试查看 genericService 的类型可得知,泛型的具体实现可以用容器里面的任意类型来替代
public WeatherForecastController(ILogger<WeatherForecastController> logger, IOrderService orderService, IGenericService<IOrderService> genericService)
{_orderService = orderService;_logger = logger;
}
在 controller 中有两种依赖注入的实例的获取方式:
通过 controller 构造函数注入
通过 [FromServices] 注入
当定义一个 controller 的时候
它的服务是大部分接口都需要使用的情况下
推荐的做法是用构造函数注入的方式
如果这个服务仅仅在某一个接口使用的情况下
推荐使用 [FromServices] 注入
GitHub源码链接:
https://github.com/witskeeper/geektime/tree/master/samples/DependencyInjectionDemo
.NET Core开发实战(第5课:依赖注入:良好架构的起点)--学习笔记(下)相关推荐
- .NET Core开发实战(第5课:依赖注入:良好架构的起点)--学习笔记(上)
05 | 依赖注入:良好架构的起点 为什么要使用依赖注入框架 借助依赖注入框架,我们可以轻松管理类之间的依赖,帮助我们在构建应用时遵循设计原则,确保代码的可维护性和可扩展性 ASP.NET Core ...
- .NET Core开发实战(定义API的最佳实践)Source Generators版
前言 极客时间上的<.NET Core开发实战>是一门非常好的课程,作者肖伟宇在第31课(https://time.geekbang.org/course/detail/100044601 ...
- .NET Core开发实战(第8课:配置框架:让服务无缝适应各种环境)--学习笔记
08 | 配置框架:让服务无缝适应各种环境 配置是应用程序发布到各种环境的必备能力,这一节开始详细讲解 ASP.NET Core 的配置框架 配置框架的核心包有两个,一个抽象包,一个实现包 Micro ...
- .NET Core开发实战(第34课:MediatR:轻松实现命令查询职责分离模式(CQRS))--学习笔记(上)...
34 | MediatR:轻松实现命令查询职责分离模式(CQRS) 核心对象 IMeditator IRequese.IRequest IRequestHandler<in TRequest, ...
- .NET Core开发实战(第25课:路由与终结点:如何规划好你的Web API)--学习笔记(下)...
25 | 路由与终结点:如何规划好你的Web API 自定义约束实现了路由约束接口,它只有一个 Match 方法,这个方法传入了 Http 当前的 httpContext,route,routeKey ...
- .NET Core开发实战(第18课:日志框架:聊聊记日志的最佳姿势)--学习笔记(下)...
18 | 日志框架:聊聊记日志的最佳姿势 除了使用 CreateLogger 指定 logger 的名称,实际上还可以借助容器来构造 logger,通常情况下我们会定义自己的类 namespace L ...
- 如何为 .NET Core 3.0 中 WPF 配置依赖注入 ?
咨询区 user842818: 我非常熟悉 ASP.NET Core 和它开箱即用的依赖注入支持,当 Controller 需要依赖注入时,可以在 构造函数 中以参数的形式来实现,这个IOC的理念相当 ...
- .NET Core ASP.NET Core Basic 1-2 控制反转与依赖注入
本节内容为控制反转与依赖注入 简介 控制反转IOC 这个内容事实上在我们的C#高级篇就已经有所讲解,控制反转是一种设计模式,你可以这样理解控制反转,假设有一个人他有一部A品牌手机,他用手机进行听歌.打 ...
- ASP.NET Core如何在ActionFilterAttribute里做依赖注入
点击蓝字 关注我 在ASP.NET Core里,我们可以使用构造函数注入很方便地对Controller,ViewComponent等部件做依赖注入.但是如何给过滤器ActionFilterAttrib ...
最新文章
- windows系统杀掉explorer.exe进程后黑屏
- Android Studio 运行、编译卡死的解决办法
- 手机开发平台指南、教程和资料介绍
- 网站导航目录要该如何优化?
- leetcode 57. 插入区间
- c/c++ 求字符数组长度(非所占内存大小)
- 实时操作系统和优先级反转
- 三次样条插值matlab,Matlab关于三次样条插值
- 虚拟机里linux7关不了,虚拟机上CentOS 7关闭防火墙操作
- pycharm: connot find declaration to go to
- 【洛谷 P3384】树链剖分【详解树链剖分】
- python爬虫-book118
- 阿里云大学Linux学习路线图(学+测)重磅上线!
- oracle expdp parallel,关于EXPDP中的PARALLEL参数
- 45度回合RPG网页游戏《烽烟OL》v1.3正式开源!
- MACD怎样判断趋势?巧用MACD指标研判市场的强弱!(实例)
- 1031 查验身份证 (15 分) python
- JDBC与ODBC的区别与应用
- AIX磁盘管理基础知识
- Android RenRen SDK 接入教程