依赖注入

基本类库

最大的引用场景:

  • 项目的可拓展性、灵活性
  • 管理复杂的依赖关系
  • 消除new

依赖注入(本身是一个核心对象):IOC容器(控制反转)

  • 映射依赖、注册类型、注册服务
  • 实例解析

.Net Core 是由 基础类库+拓展类库(依赖注入框架....)

.Net Core 原生DI(内置依赖注入框架)

而依赖注入是基石

Microsoft.Extesions.Dependencyinjection //具体实现
Microsoft.Extesions.Dependencyinjection.Abstractopms //抽象、基础类型、
   ServiceProVider//根容器

服务范围

3中生命周期:单例、作用域、瞬时

  • 单例模式 —— 根容器(保存在根容器上,下次就可以直接获取)
  • 作用域模式 —— 当前容器(子容器)
  • 瞬时模式 —— 一次性不保存

    ASP.NET Core应用 —— 全局根容器(自带的)

    ​ 只有子容器,没用孙子容器。不管有多少孙子都是和子容器同级。

    ​ 子容器只关心根容器,不会在意谁是父容器,也不会知道父容器是谁。

每一个 作用域对象 都是有明确的边界,针对每个 HTTP请求上下文

一个请求上下文就是一个作用域 (绑定)

.NET Core 用于提供服务实例的容器有两种

  • Application ServiceProvider(程序本身)
  • Request SericeProvider(请求所创建)

请求 —— 创建服务范围 —— 子容器(瞬时、作用域) —— 处理请求所需的服务

  1. 容器可以提供构造函数所需的所有参数
  2. 如果某个构造函数的参数类型集合能够成为所有合法构造函数参数类型的超集,那么这个构造函数就会被容器选择

扩展类库

Autofac: 扩展类库 第三方依赖注入框架(里面有非常丰富的注册功能。例如:属性注入、程序集注入)

Scrutor: .Net内置DI的扩展包,弥补内置DI服务注册方式

image-20221110164009563.png
image-20221110163940967.png

最后修改:2022 年 11 月 21 日
如果觉得我的文章对你有用,请随意赞赏