说起依赖注入,很多人会想起两个词: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介绍的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持软件开发网。