我嘗試使用到目前爲止工作的新的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。 –