惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MongoDB | Blog
MongoDB | Blog
B
Blog RSS Feed
MyScale Blog
MyScale Blog
M
MIT News - Artificial intelligence
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
U
Unit 42
Blog — PlanetScale
Blog — PlanetScale
L
LangChain Blog
C
Check Point Blog
WordPress大学
WordPress大学
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
T
Tailwind CSS Blog
Vercel News
Vercel News
腾讯CDC
GbyAI
GbyAI
有赞技术团队
有赞技术团队
S
SegmentFault 最新的问题
H
Help Net Security
博客园 - 三生石上(FineUI控件)
D
DataBreaches.Net
Microsoft Security Blog
Microsoft Security Blog
小众软件
小众软件

博客园 - 张彦山

03_03_依赖注入多种方式 03_02_服务注册与消费 03_01_服务作用域 02_05_生命周期管理 02_04_依赖注入基本用法 1_05_详解.NET标准与重要工具 1_04_盘点.NET重要组件 1_03_详解.NET公共语言运行时 1_02_解读.NET开源许可协议 1-01梳理.NET平台发展路线 SQLServer存储过程中break、continue及return 三者的区别: SqlDBX格式化sql语句输出 Mysql转存sql结构和数据文件,不包含视图,使用结构同步视图 启用防火墙要配置入站规则redis端口6379或程序 清除SQL Server数据库日志(ldf文件) 阿里云服务器sqlserver暴力登录密码攻击的处理 清除远程桌面缓存命令 sqlserver修改表结构,阻止保存要求重新创建表的更改 从旧表复制数据到新表
02_03_依赖注入与控制反转
张彦山 · 2026-01-24 · via 博客园 - 张彦山

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

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容器之上的,最基本的编程模式