【发布时间】:2021-12-27 17:12:48
【问题描述】:
文档对我帮助不大。
我不明白它是做什么用的,为什么要附上@Inject?
喜欢这一行
@Named(AUTH_INTENT)
@Inject
lateinit var authIntent: Intent
【问题讨论】:
标签: kotlin dependency-injection dagger-2 dagger
文档对我帮助不大。
我不明白它是做什么用的,为什么要附上@Inject?
喜欢这一行
@Named(AUTH_INTENT)
@Inject
lateinit var authIntent: Intent
【问题讨论】:
标签: kotlin dependency-injection dagger-2 dagger
对于大多数依赖项,在范围内只有一个请求类型的类(例如服务实现),因此要注入的实例可以从该类型派生。
但是,如果您有多个可用于注入的对象(例如多个整数配置值),您必须添加 @Named 注释来指定您想要获取的具有相同类型的众多实例之一。
https://dagger.dev/dev-guide 部分:预选赛
@Module
class AppModule(val app: Application) {
@Provides @Named("the_answer")
fun providesTheAnswer(): Int {
return 42
}
@Provides @Named("zero")
fun providesZero(): Int {
return 0
}
}
// this works
class MyClass @Inject constructor(
@Named("the_answer") val answer: Int,
@Named("zero") val other: Int,
) {
}
// this does not work. Which parameter should get which value?
class MyClass @Inject constructor(
val answer: Int,
val other: Int,
) {
}
}
【讨论】:
就 Kotlin 而言,它们都只是注解。
这些特定注解由您的依赖注入框架读取。@Inject 表示这是一个应该注入其值的字段@Name 指示框架如何获取要注入的值
您使用的依赖注入 (DI) 框架的文档涵盖了详细信息。我看到问题被标记为“dagger”,这是一种 DI 产品,但还有其他几个使用相同注释名称的 DI 系统。
【讨论】: