ASP.NET Core 6.0/8.0学习笔记(十一)——.NET中的DI与服务注册

一、DI的几个概念

1.服务(service):对象(比如说一个数据库操作对象)
2.注册服务:提前准备好那些服务(例如实体类、方法的实现等等)添加到服务容器中。
3.服务容器:负责管理注册的服务(把准备好的实体类、方法等添加到这里,由容器进行接管)
4.消费服务:创建对象以及关联对象
5.对象的生命周期:Transient(瞬态):服务使用完毕即被销毁,每次获取都是一个新的对象;
Scoope(范围):在某一范围内使用,出了这个范围就销毁服务。在这个范围内获取的服务对象都是同一个
Singleton:单例,无论谁获取该服务,拿到的都是一个对象

二、.NET 中的DI

1.根据类型来获取与注册服务。可以分别指定服务类型(service type)和实现类型(implementation)。这两者可能相同,也可能不同。服务类型可以是类,也可以是接口。服务类型尽量使用接口。建议面向接口编程,更灵活。
2…NET控制反转组件取名为DependencyInjection,但是它包含ServiceLocator(服务定位器)的功能
3.使用接口来模拟依赖注入:
TestServiceImpl与TestServiceImpl2实现ITest接口(服务),并实现相应的方法:
在这里插入图片描述
在这里插入图片描述

运行结果:
在这里插入图片描述

三、使用DI

1.首先安装 包Microsoft.Extensions.DependencyInjection
在这里插入图片描述

2.引入对应的命名空间
3.ServiceCollection用来构造容器对象IServiceProvider。(先将所有要注册的服务对象放到这个ServiceCollection集合中)调用ServiceCollection的BuildServiceProvider()创建的ServiceProvider对象,可以获取到BuildServiceProvider()之前ServiceCollection中的对象,也就是为业务逻辑所提供的对象

服务接口:
在这里插入图片描述

两个实现类:
British:
在这里插入图片描述

Chinese:
在这里插入图片描述
在Program.cs中实现服务的注册与消费:
在这里插入图片描述

使用框架的代码架构:
在这里插入图片描述

4.如何体现“控制反转”:首先确定服务的创建者与消费者,消费者很明显是Program.cs类中的应用,但是他们并不需要关心IPerson对象如何实现,应用只需要完成对象的消费即可。对象的控制转移到DI框架中,也就是将British类注册到服务容器当中。而且消费者Program.cs并不能确定它所获取的究竟是Chinese还是Britsh实现,这由服务端决定,更好的体现了所谓“控制反转”。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GISer_Qing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值