【问题标题】:What is @Named in Kotlin?Kotlin 中的@Named 是什么?
【发布时间】:2021-12-27 17:12:48
【问题描述】:

文档对我帮助不大。

我不明白它是做什么用的,为什么要附上@Inject

喜欢这一行

@Named(AUTH_INTENT)
@Inject
lateinit var authIntent: Intent

【问题讨论】:

标签: kotlin dependency-injection dagger-2 dagger


【解决方案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 系统。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 2020-07-12
      • 2018-02-03
      • 2017-12-01
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多