IOC/DI概念简述及基本应用
早几年面试时,面试官经常问我依赖注入的概念,但有面试官自己都不是很清楚ioc和di的区别,而是草草归于一类,今天翻了翻以前写的demo,顺便把这部分概念整理出来,加深一下印象。
先科普一下,IOC是什么
IOC(Inversion of Control)又称控制反转,它并不是指某种技术实现,而是OOP的一种设计原则。
这个概念基础不牢靠的同学很多都是和DI混淆的,包括我曾经遇到几个面试官也是这样(面试过程极其尴尬),这里着重强调。
为什么叫控制反转?传统程序设计中,我们经常使用 new 创建对象,这种做法是我们主动去创建依赖对象,可以理解为“正转”。
如果把创建对象(new)的操作移交给某个程序(IOC容器)来控制,就理解为“反转”。也就是说,就是把创建对象交给IOC容器去做,将控制权反转给IOC容器。
什么是DI
DI(Dependency Injection)又称依赖注入,是IOC的一种实现方式。
言简意赅的讲,由容器动态创建依赖关系并注入到组件中去。依赖注入并不能给程序带来更多功能,却可以提升组件重用率、系统可扩展性,让程序更灵活。
.Net Core的实现
net core自带IOC容器(也许你听过这一句:一切皆注入),只需要简单配置即可使用。
先新建一个core项目,然后编写接口和实现类:
public interface IProduct
{
void Get();
} public class Product : IProduct
{
public void Get()
{
throw new NotImplementedException();
}
}
之后进入Startup进行配置:
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IProduct, Product>();
}
接下来是代码环节:
public class Test
{
private IProduct Pro { get; set; } public UserController(IProduct pro)
{
Pro = pro;
} public void Get()
{
//实现
Pro.Get();
}
}
别走,还没完
还有一个点需要注意,那就是生命周期。一般来说,既然问到了IOC,那么生命周期必然也会引出,所以一定要搞清楚。
生命周期有三种:
(单例模式)Singleton:首次请求创建,之后所有请求都沿用这个已创建的服务。
(瞬态模式)Transient:每次请求都创建,上面的代码里就是这种模式。
(作用域模式)Scoped:每次请求创建,同一个请求内不管调用多少次都只会被创建一次。
//瞬态
services.AddTransient<IProduct, Product>(); //作用域
services.AddScoped<IProduct, Product>(); //单例
services.AddSingleton<IProduct, Product>();
希望对大家有帮助。
IOC/DI概念简述及基本应用的更多相关文章
- Spring框架-IOC/DI详细学习
一.IOC/DI概念 参考博客:https://www.cnblogs.com/xdp-gacl/p/4249939.html IOC(inversion of control, 控制反转)是一种设计 ...
- Spring+IOC(DI)+AOP概念及优缺点
Spring pring是一个轻量级的DI和AOP容器框架. 说它轻量级有一大部分原因是相对与EJB的(虽然本人从没有接触过EJB的应用),重要的是,Spring是非侵入式的,基于spring开发的应 ...
- Spring.Net---2、IoC/DI基本概念
---------------------------------------------------------------------------------- (1)IoC/DI的概念 IoC ...
- JavaWeb_(Spring框架)Spring中IoC与DI概念入门
Spring是于2003 年兴起的一个轻量级的Java 开源框架,它由Rod Johnson创建.传统J2EE应用的开发效率低,Spring作为开源的中间件,提供J2EE应用的各层的解决方案,Spri ...
- Spring IOC/DI和AOP原理
一 IOC/DI 1. 概念机原理 IOC: Inversion of Control(控制反转)是一种设计思想,就是容器控制应用程序所需要外部资源的创建和管理,然后将其反转给应用程序.对象及其依赖对 ...
- 深入理解IoC/DI
------------------------------------------------------------------------ 理解IoC/DI 1.控制反转 --> 谁控制谁 ...
- IoC/DI基本思想的演变
---------------------------------------------------------------------------------- (1)IoC/DI的概念 IoC ...
- 工厂方法模式与IoC/DI
IoC——Inversion of Control 控制反转 DI——Dependency Injection 依赖注入 1:如何理解IoC/DI 要想理解上面两个概念,就必须搞清 ...
- spring--学习之IOC DI
2.1.1 IoC是什么 Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器 ...
随机推荐
- CE未知数值修改
一样,用植物大战僵尸测试.来搜索修改向日葵生产阳光的CD值. 由于开始并不知道向日葵cd的初始值,所以用CE搜索未知的初始值 返回游戏,每次向日葵晃一下搜索一下减少的值. 锁定修改为0发现成功. 然后 ...
- [01]HTML基础之简单介绍
1.前言 现如今科技进步,足不出户尽晓天下事,一转身便仿若隔世茫然.科技绽放时代,网络技术对人们的触变无疑是深远而重大的,隐于缤纷绚丽的网页背后,是前端的蜕变更新. 如今,随意点开页面,绚丽华彩的特效 ...
- Chisel3 - Tutorial - ShiftRegister
https://mp.weixin.qq.com/s/LKiXUgSnt3DzgFLa9zLCmQ 简单的寄存器在时钟的驱动下,逐个往下传值. 参考链接: https://github.com ...
- JavaScript (三) js的基本语法 - - 数组 与函数 、关键字
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.关键字 1.break 关键字使用 break关键字:如果在循环中使用,遇到了break,则立刻跳出 ...
- Java实现 LeetCode 791 自定义字符串排序(桶排序)
791. 自定义字符串排序 字符串S和 T 只包含小写字符.在S中,所有字符只会出现一次. S 已经根据某种规则进行了排序.我们要根据S中的字符顺序对T进行排序.更具体地说,如果S中x在y之前出现,那 ...
- (Java实现) 洛谷 P1071 潜伏者
题目描述 R国和 S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 S国的 R 国间谍小 C终于摸清了 S 国军用密码的编码规则: 1. S 国军方内部欲发送的原信息经过 ...
- Java实现 蓝桥杯VIP 算法训练 开心的金明
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱 ...
- Java实现 LeetCode 268 缺失数字
268. 缺失数字 给定一个包含 0, 1, 2, -, n 中 n 个数的序列,找出 0 - n 中没有出现在序列中的那个数. 示例 1: 输入: [3,0,1] 输出: 2 示例 2: 输入: [ ...
- Java实现 蓝桥杯 历届试题 数字游戏
问题描述 栋栋正在和同学们玩一个数字游戏. 游戏的规则是这样的:栋栋和同学们一共n个人围坐在一圈.栋栋首先说出数字1.接下来,坐在栋栋左手边的同学要说下一个数字2.再下面的一个同学要从上一个同学说的数 ...
- java实现第六届蓝桥杯打印大X
打印大X 打印大X 小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度. 为了便于比对空格,所有的空白位置都以句点符来代替. 要求输入两个整数m n,表示笔的宽度,X的高度.用 ...