我尝试使用目前有效的新 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"
}
}
}
所以我需要另一种方法来创建静态方法。
最佳答案
是的,我找到了解决方案:-)
Kotlin 获取 static
方法的方法是将该方法放在 companion object
中,但现在 Dagger 抛出一个错误,即 @Provides
只能在 @Module
中使用。为了解决这个问题,我也注释了 companion object
@Module
internal abstract class TestModule {
@Module
companion object {
@Provides
@JvmStatic
internal fun provideTest(): String {
return "foo bar"
}
}
}