我尝试使用到目前为止工作的新的Dagger Android injection thing。模块必须设置
现在我想扩展它到我的需要。
在我MainActivityModule
我加了TestModule
:
@Module
abstract class MainActivityModule {
@ActivityScope
@ContributesAndroidInjector(modules = arrayOf(TestModule::class))
internal abstract fun contributeMainActivityInjector(): MainActivity
}
的TestModule
是非常简单的:
@Module
internal abstract class TestModule {
@Provides
internal fun provideTest(): String {
return "foo bar"
}
}
但我得到这个错误:TestModule must be set
我看着生成的源代码但无法找到我必须做的提示。我搜索了这个在谷歌太多,但发现只有简单的例子:-(
有什么我忘记了吗?你可以在GitHub找到完整的应用程序。
编辑
杰夫鲍曼赛义德的provideTest()
必须是静态的。当我创建一个Java类是这样的:。
@Module
public class TestModule {
@Provides
static String provide() {
return "foo bar";
}
}
它的工作原理
所以最后一个问题:如何在Kotlin中做到这一点?这是行不通的:
@Module
internal abstract class TestModule {
companion object {
@Provides
@JvmStatic
internal fun provideTest(): String {
return "foo bar"
}
}
}
所以我需要另一种方法来创建一个静态方法。
在Java中,您会期望'@Processor'方法是静态的,这意味着什么都不使用TestModule实例。但是,[Kotlin不支持静态方法](https://kotlinlang.org/docs/reference/classes.html#companion-objects)。我不太了解Kotlin提供的真实答案,但似乎Dagger需要一个实例,因为'provideTest'是非静态的,并且不相信它可以通过公共无参数构造函数实例化TestModule。 –