IOC和DI介绍
老马-Max 人气:1名词解释
说起依赖注入,很多人会想起两个词:IOC和DI。
- IOC(Inversion of Control)=控制反转
- DI(Dependency Injection)=依赖注入
IOC其实并不是某项具体的实现技术,它是一种思路(或者是设计理念),这一点很多有经验的同学都会搞混。如果用白话来讲,IOC就意味着把对象交给IOC容器控制,而不是在对象内部控制。简而言之就是“容器控制对象”。
套入到程序来说,我们有两个class,A、B,如果B要用到A的方法,传统的方法是在B中添加A的引用(比如new),这种就算是“正转”,但如果我们把这个过程IOC容器去控制,那就是“反转”。IOC也不能为程序带来更多功能,其主要目的是为了提升重用率、增强扩展性、降低耦合性、增强对程序设计的理解。
DI是什么呢?可以把它理解为IOC的另一种解释方式。可能是IOC的概念听起来的确云里雾里,所以有位大佬(Martin Fowler)给出了一个新的名词DI,明确指出“被注入对象依赖IoC容器配置依赖对象”,从另一个角度解释了IOC的理念。
net core的实现
net core自带ioc容器,如果你想把某个对象交给ioc容器来控制,最简单的使用方法就是在你的startup.cs中添加代码,如下:
public void ConfigureServices(IServiceCollection services) { services.AddScoped<XXX>(); services.AddTransient<XXX>(); services.AddSingleton<XXX>(); }
在这个阶段,需要注意交给ioc容器控制的对象有三种声明周期可以选择:
- (单例模式)Singleton:首次请求创建,之后所有请求都沿用这个已创建的服务。
- (瞬态模式)Transient:每次请求都创建,上面的代码里就是这种模式。
- (作用域模式)Scoped:每次请求创建,同一个请求内不管调用多少次都只会被创建一次。
如果需要使用被注入的对象,只需要在构造函数中添加被注入类型的对象即可,如下:
private readonly XXX _x; public XController(XXX x) { _x = x; }
当有多个对象时如法炮制。
到此这篇关于.Net Core依赖注入IOC和DI介绍的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。
加载全部内容