Kotlin 中的@Named 是啥?
Posted
技术标签:
【中文标题】Kotlin 中的@Named 是啥?【英文标题】:What is @Named in Kotlin?Kotlin 中的@Named 是什么? 【发布时间】:2021-12-27 17:12:48 【问题描述】:文档对我帮助不大。
我不明白它是做什么用的,为什么要附上@Inject
?
喜欢这一行
@Named(AUTH_INTENT)
@Inject
lateinit var authIntent: Intent
【问题讨论】:
看匕首注射! sodocumentation.net/dagger-2/topic/10812/… 【参考方案1】:对于大多数依赖项,在范围内只有一个请求类型的类(例如服务实现),因此要注入的实例可以从该类型派生。
但是,如果您有多个可用于注入的对象(例如多个整数配置值),您必须添加 @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,
)
【讨论】:
【参考方案2】:就 Kotlin 而言,它们都只是注解。
这些特定注解由您的依赖注入框架读取。@Inject
表示这是一个应该注入其值的字段@Name
指示框架如何获取要注入的值
您使用的依赖注入 (DI) 框架的文档涵盖了详细信息。我看到问题被标记为“dagger”,这是一种 DI 产品,但还有其他几个使用相同注释名称的 DI 系统。
【讨论】:
以上是关于Kotlin 中的@Named 是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin Coroutines 中的 main-safe 是啥?