02_03_依赖注入与控制反转

 

服务注册、管道中间件配置部分

mvc

Grpc

不同的服务和管道中间件就会是不同的应用

一切的基础就是从添加服务到容器部分开始的

是asp.netcore中最核心最基础的部分

基础的核心组件,依赖注入系统

主要提供两个核心功能:

1、注册类型(高大上的名称:服务)

2、解析实例

类型A想要使用类型B,都要注册到系统中

类型A通过依赖注入系统获取使用类型B的实例,不需要自己new一个出来

不是主动的去拿,是以注入的方式获取的

 

何为注入?

先了解控制反转,依赖注入里面有一个叫IOC容器的东西,IOC就是控制反转的简称

所有注册的类型和由依赖注入系统创建的实例,都会保存到IOC容器里

为什么要控制反转呢?

通过第三方实现组件的装配和管理

场景:

4岁的儿童--》贪吃,自己去做饭、冰箱拿东西,不可思议,安全隐患

就像自己new一个对象出来,自己丰衣足食

其实只要陈述一下自己的需求就好了,我饿了,甚至不需要告诉想要吃什么

儿童我饿了---》父母--》做好食物(依赖)---》喂到嘴里去(注入)

 

第一种,主动去拿,自己动手

第二种,被动获取

对食物的控制权,反转了

 

我是对食物的需求者,,变成了父母做好给他

不需要关心食物从哪里来,你只需要知道你需要的食物给你了

 

代码上

就是对组件对象的控制权

以前自己new一个

现在找IOC容器第三方拿给你

应用程序本身不负责依赖对象的创建和维护,而是交给第三方负责

控制器从应用程序,转移到了第三方,第三方不在我们的控制范围之内

控制权不在我们自己手中,就被所谓的反转了

 

控制反转和依赖注入又有什么关系呢?

依赖注入是对控制反转的一种实现,依赖注入是IOC用来反转依赖的一种手段

 食物是小孩依赖的东西,父母喂给他嘴里去,就是注入

从自己动手,到被动入口,懒到极致

依赖注入不是目的,只是实现控制反转的方式

 

使用依赖注入的目的是什么呢?

管理应用中复杂的依赖关系

为什么不去冰箱里自己去拿呢?在一个庞大的应用中我们的对象成千上万,我们的对象成百上千,

都想冰箱里面的东西,都是我们所依赖的东西

每个开发者都不可能了解项目的全貌,就有可能拿到不属于他的东西,自己随意的new来new去,很不优雅

new错了,也不灵活

类型A依赖类型B,就有个强依赖关系,耦合就很紧密

B有依赖更多其它的类,很多层的依赖,复杂的管理

不需要管理复杂的依赖了,你想要什么我都拿给你

 

 

一种反转流、依赖和接口的方式,它吧传统上由程序代码直接操控的对象的调用权交给第三方,通过第三方来实现对象组件的装配和管理。

第三方就是===》IOC容器

场景里面,谁是IOC容器?

冰箱?父母?

父母只是扮演依赖注入系统里面的一些辅助方法,类型注册、实例解析

冰箱才是IOC容器,是依赖注入系统里面的核心对象

 

依赖注入系统包括了IOC容器

 

冰箱里面的东西,都是父母买来放进去的,同样需要父母拿出来加工食物

IOC容器才是真正存放食物的地方, 存放对象的地方

也是保存到冰箱里面了

注册服务、类型,是注册到容器里面了

对象被创建出来,也是被保存到容器里面了

拿从冰箱拿,放也放到冰箱

 

IOC容器是工厂模式的一种升华

工厂模式是用来创造对象的

注册类型在工厂,创建对象也在工厂,

工厂是需要你自己指定,IOC是自动的智能工厂

 

Core的IOC容器还有一个名字===》服务提供者,ServicePrivoder 

.Net环境里,所有注册到IOC容器的类型都被称为服务

Core里面的组件,大多都需要从容器里面获取它所需要的服务

真个asp.net core框架都是建立在IOC容器之上的,最基本的编程模式

 

posted on 2026-01-24 12:25  张彦山  阅读(0)  评论(0)    收藏  举报