kotlin - 如何使用 Dagger 2 注入(inject) Kotlin 委托(delegate)属性?

标签 kotlin dagger-2

我需要使用 dagger2 将 (@Named) 注入(inject)到 kotlin 委托(delegate)属性中。

//works great!
@set:Inject var cat: Cat by Ref(ref)

//fails
@set:[Inject Named("dog")] var dog : Animal by Ref(ref)

所以我尝试了
//fails, can't use `@field` with a delegated property
@field:[Inject Named("dog")] var dog : Animal by Ref(ref)

//fails, can't use `lateinit` with a delegated property
@field:[Inject Named("dog")] lateinit var dog : Animal by Ref(ref)

最佳答案

您不能,因为此类属性没有任何字段,而是委托(delegate)获取和设置对委托(delegate)属性对象的调用。而 dagger 对这个委托(delegate)一无所知,这只是 2 个方法和一个对象。

我不确定你的情况,但可能你可以注入(inject)你的委托(delegate)类实例 Ref 所需的值,但我不知道你想做什么,你的委托(delegate)如何工作以及你如何使用 Dagger(什么类型的注入(inject)你用)

关于kotlin - 如何使用 Dagger 2 注入(inject) Kotlin 委托(delegate)属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42428731/

相关文章:

android - Dagger 回收 View 布局管理器注入(inject)

android - 在 Android 中设置 Dagger 2 和项目组织

unit-testing - 如何为 MockWebServer 设置默认响应?

android - Retrofit 2 on Android 6 设置零路径参数

android - 如何处理 Jetpack Compose 中的导航?

android - 我应该在 Singleton 类中处理一次性用品吗(Android RxJava 2)

android - Dagger2 自定义范围和销毁组件

android - Dagger2 Android DI - lateinit 属性尚未初始化

android - 如何从 rxjava flatmap 调用协程用例

Spring Boot 和 Kafka 升级破坏了我的测试