Geo*_*rid 2 android kotlin dagger-2
我有一个 String? 类型的属性。我可以很好地 @Inject 值,直到我尝试向属性添加 @Named 属性。如果我使用“字符串”而不是可以为空的字符串,一切也都可以正常工作,但该值可以为空,所以我需要“?”。
在我的模块中,我有:
@Provides
@Named("someStringOrNull")
fun provideSomeStringOrNull(): String? = "STRING OR NULL"
Run Code Online (Sandbox Code Playgroud)
在我的活动中,我有:
@set:Inject
@set:Named("someStringOrNull")
var someStringOrNull: String? = null
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Error:(11, 2) error: java.lang.String cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method.
public abstract void inject(@org.jetbrains.annotations.NotNull()
^
java.lang.String is injected at
com.scrawlsoft.daggerwoes.MainActivity.setSomeStringOrNull(p0)
com.scrawlsoft.daggerwoes.MainActivity is injected at
com.scrawlsoft.daggerwoes.AppComponent.inject(target)
Run Code Online (Sandbox Code Playgroud)
如果我删除 @Named attr,效果很好,所以我相当确定“@set:”是正确的,但我可能会弄错。
关于如何开展这项工作有什么建议吗?(目前,我正在考虑将其包装在自定义类中,这样我就不需要 @Named,但这对我来说似乎很浪费。)
完整的源代码可以在以下位置找到: https: //github.com/gmadrid/DaggerWoes/tree/master/app/src/main/java/com/scrawlsoft/daggerwoes
感谢您的帮助。
您忘记使用@JvmField来指示 Kotlin 编译器将您的属性公开为字段,而不是生成 getter/setter:
@Inject
@JvmField
@field:Named("someStringOrNull")
internal var someStringOrNull: String? = null
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1226 次 |
| 最近记录: |