云计算百科
云计算领域专业知识百科平台

第313篇 依赖注入入门:构造注入与字段注入

承接上一篇《模块化与功能开关:灰度与实验框架》,那一篇讲的是「怎么控制功能的行为」,这一篇讲「怎么给对象提供它需要的东西」。依赖注入看起来只是 new 对象换个地方,但它是前面几篇所有解耦手段的基础设施——没有 DI,前面的接口下沉、模块边界、测试替身全都落不了地。

结论先行:依赖注入的核心价值不是「省代码」,而是「让依赖变成显式的、可替换的、编译期可检查的」。 一个对象如果自己 new 出依赖,它的依赖关系就隐藏在了方法体里,测试时无法替换,分层时无法解耦。DI 做的第一件事是让这些依赖出现在构造函数上。

一、手写 DI:先理解框架在做什么

在讲 Hilt 之前,先手写一遍最小 DI 容器,否则框架就成了魔法。

1.1 构造函数注入

// 无 DI:依赖藏在方法体里
class ProfileViewModel {
private val repo = UserRepositoryImpl(ApiClient(), UserDao()) // 依赖写死

fun load() { viewModelScope.launch { update(repo.getUser()) } }
}

// 有 DI:依赖在构造函数里显式声明
class ProfileViewModel(
private val repo: UserRepository, // 依赖什么,看签名就知道
private val dispatcher: CoroutineDispatcher
) : ViewMod

赞(0)
未经允许不得转载:网硕互联帮助中心 » 第313篇 依赖注入入门:构造注入与字段注入
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!