0Pricing
Android Academy · 课时

模块和提供者

告诉 Hilt 如何创建依赖项

模块和提供者 是 CoddyKit 上的免费 Android Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Android Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Android Academy 课程共包含 4 节课。

告诉 Hilt 如何构建对象

如果一个类的构造函数带有 @Inject 注解,Hilt 就能自动构建该类。但对于接口或您无法修改的类型,您必须通过模块告诉 Hilt 应如何构建。

构造函数注入

最简单的情况:为构造函数添加注解,Hilt 就知道如何构建该类。

class Analytics @Inject constructor(
    private val api: ApiService
)

构造函数注入不够用的情况

以下对象的构造函数无法添加注解:

  • 接口(没有构造函数)。
  • 来自库的类(例如 Retrofit、Room)。

这些对象需要通过模块提供。

定义模块

@Module 用于告诉 Hilt 如何提供类型。@InstallIn 声明该模块所属的组件(作用域)。

import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent

@Module
@InstallIn(SingletonComponent::class)
object NetworkModule

使用 @Provides 提供库类型

在用于构建并返回依赖项的函数上使用 @Provides。当需要该类型时,Hilt 会调用此函数。

@Provides
@Singleton
fun provideRetrofit(): Retrofit =
    Retrofit.Builder()
        .baseUrl("https://api.example.com/")
        .build()

提供函数可以相互依赖

@Provides 函数可以接收参数;Hilt 会从依赖关系图中为其提供这些参数。

@Provides
fun provideApi(retrofit: Retrofit): ApiService =
    retrofit.create(ApiService::class.java)

使用 @Binds 绑定接口

要将接口绑定到实现类,请在抽象模块中使用 @Binds。对于简单绑定,它比 @Provides 更高效。

@Module
@InstallIn(SingletonComponent::class)
abstract class RepoModule {
    @Binds
    abstract fun bindRepo(
        impl: NetworkUserRepository
    ): UserRepository
}

@Provides 与 @Binds

  • @Binds — 当您只需将接口映射到一个通过构造函数注入的实现类时使用。函数必须是抽象函数。
  • @Provides — 当您必须运行代码来构建对象时使用(例如使用构建器)。

使用 @Singleton 设置作用域

为提供函数添加 @Singleton 等作用域注解,这样 Hilt 就会在整个应用中复用同一个实例,而不是每次都创建新实例。

使作用域与组件匹配

作用域必须与组件匹配:@Singleton 对应 SingletonComponent,@ActivityScoped 对应 ActivityComponent,依此类推。

模块总结

  • @Module + @InstallIn 定义绑定所在的位置。
  • @Provides 用于构建库类型或复杂类型。
  • @Binds 用于将接口映射到实现类。

快速检查

测试您对模块和提供函数的理解。

回顾

您学到了:

  • 当您拥有某个类的代码时,可以使用构造函数注入。
  • @Module + @InstallIn 可告诉 Hilt 如何提供其他类型。
  • @Provides 用于构建库对象或复杂对象;@Binds 用于映射接口。
  • 让 @Singleton 等作用域与对应组件匹配。

常见问题解答

「模块和提供者」课时是免费的吗?

是的 — 「模块和提供者」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Android Academy 课程的其余内容,请升级到 CoddyKit PRO。 Android Academy 课程共包含 4 节课。

「模块和提供者」这节课中我会学到什么?

告诉 Hilt 如何创建依赖项 你通过在浏览器中直接运行的动手代码来练习 Android Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Android Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Android Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「模块和提供者」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Android Academy 课中编写并运行代码吗?

能。每节 Android Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 为什么使用依赖注入
  2. 设置 Hilt
  3. 模块和提供者
  4. 向 ViewModel 注入依赖
← 返回 Android Academy