依赖注入是什么?

内容来自 DOC https://q.houxu6.top/?s=依赖注入是什么?

已经有许多问题已经发布,具体涉及依赖注入的问题,例如何时使用它以及有哪些框架支持它。然而,

什么是依赖注入?何时/为何应该或不应该使用它?


依赖注入是将依赖项传递给其他对象或框架(依赖注入器)。

依赖注入使测试更容易。可以通过构造函数进行注入。

SomeClass()的构造函数如下:

public SomeClass() {
    myObject = Factory.getObject();
}

问题
如果myObject涉及复杂的任务,例如磁盘访问或网络访问,那么对SomeClass()进行单元测试将很困难。程序员必须模拟myObject并可能拦截工厂调用。

替代解决方案

  • myObject作为参数传递给构造函数。
public SomeClass (MyClass myObject) {
    this.myObject = myObject;
}

myObject可以直接传递,这使得测试更容易。

  • 一个常见的替代方案是定义一个不做任何事情的构造函数。可以通过setter进行依赖注入。(h/t @MikeVella)。
  • Martin Fowler记录了第三种替代方案(h/t @MarcDix),其中类明确实现一个接口以注入程序员希望的依赖项。

在没有依赖注入的情况下,很难隔离组件进行单元测试。

在2013年,当我写这个答案时,这是Google Testing Blog上的主要内容之一。对我来说,这仍然是最大的优势,因为程序员不总是需要在运行时设计中具有额外的灵活性(例如,用于服务定位器或类似模式)。程序员通常需要在测试期间隔离类。

posted @   小满独家  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 易语言 —— 开山篇
· 实操Deepseek接入个人知识库
· Trae初体验
点击右上角即可分享
微信分享提示