依赖注入是什么?
内容来自 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上的主要内容之一。对我来说,这仍然是最大的优势,因为程序员不总是需要在运行时设计中具有额外的灵活性(例如,用于服务定位器或类似模式)。程序员通常需要在测试期间隔离类。
标签:
笔记
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 易语言 —— 开山篇
· 实操Deepseek接入个人知识库
· Trae初体验