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 中的 out 关键字是啥

Kotlin Coroutines 中的 main-safe 是啥?

Kotlin 中的 Python 列表、集合和映射推导等价物是啥?

Kotlin 协程中的挂起函数是啥意思?

Kotlin:“return@”是啥意思?

Kotlin 中这些东西的用途是啥?