1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > ioc控制反转_深入理解依赖注入(DI)和控制反转(IOC)

ioc控制反转_深入理解依赖注入(DI)和控制反转(IOC)

时间:2023-02-09 11:54:17

相关推荐

ioc控制反转_深入理解依赖注入(DI)和控制反转(IOC)

转载本文务必须注明出处、微信号(Yemeir_com)、以及添加原文链接。

为什么要使用依赖注入

使用依赖注入(DI)可以使控制者与抽象实现者松耦合,便于单元测试。通过控制反转(IOC)的设计原理来减少不同技术的依赖,并写出通用的代码。

依赖注入简单理解就是:依赖于抽象,不依赖于具体实现。我们可以把“将具体实现传递的过程”看成注入。

使用依赖注入

从代码中我们可以看出来,LoginControllerLoginService是紧耦合。这种耦合是不利于扩展的。试想一下:假如LoginService服务需要同时提供Http Api以及更多的其他服务我们将怎么处理?

无非去增加一个ApiLoginService的服务,然后增加一个ApiMethod方法,最后实例化ApiLoginService去调用ApiMethod()。由上到下全得改。那我们使用依赖注入和控制反转怎么实现。

使用依赖注入

以上代码定义了一个ILoginService接口,Loginservice继承了该接口,并实现了Run方法。LoginController中构造函数接受ILoginService注入,这就是所说的依赖于抽象,而并非依赖于ILoginService实现类Loginservice

在Main函数中我们实例化LoginController并将LoginService具体的实现传进去。

现在我们假如有一个API的服务我们怎么做:编写ApiLoginService继承ILoginService并实现Run方法,最后我们是不是就只需要把Main()中的new LoginService()替换成newApiLoginService()就可以了,不再需要去改动LoginController类中的方法.

以上代码利用了控制反转的思想。下面讲讲什么是控制反转。

控制反转

控制反转并不属于代码上的改变,而是思路上的改变。LoginController中并没有像代码1里面所示需要实例化LoginService,而需要使用的该实例由外部传入,这就是控制反转。

用一段对话更容易理解:

LoginController说:依赖ILoginService接口\抽象的构造函数已经准备完毕,请通过我的构造函数注入。请问下一步怎么做。

Main说你别管具体实现,我会把具体实现传给你。

关于依赖注入容器的相关知识,我将在下一篇文章中讲到。

如果喜欢请关注支持笔者,您的关注是笔者源源不断创作的动力!

转载本文务必须注明出处、微信号(Yemeir_com)、以及添加原文链接

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。