.Net Core依赖注入IOC和DI介绍

Madge ·
更新时间:2024-11-14
· 404 次阅读

名词解释

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



DI net .NET ioc core

需要 登录 后方可回复, 如果你还没有账号请 注册新账号