我尝试使用目前有效的新 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"
        }
    }
}

10-08 16:37