必须设置模块

Ral*_*ann 4 android kotlin dagger-2

我尝试使用迄今为止有效的新Dagger Android注塑产品.

现在我想扩展到我的需求.

在我的MainActivityModule我添加了一个TestModule:

@Module
abstract class MainActivityModule {

    @ActivityScope
    @ContributesAndroidInjector(modules = arrayOf(TestModule::class))
    internal abstract fun contributeMainActivityInjector(): MainActivity
}
Run Code Online (Sandbox Code Playgroud)

TestModule很简单:

@Module
internal abstract class TestModule {

    @Provides
    internal fun provideTest(): String {
        return "foo bar"
    }
}
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误: TestModule must be set

我查看了生成的源代码,但无法找到提示我必须做什么.我也在谷歌搜索过这个,但发现只有简单的例子:-(

我忘记了什么?你可以在GitHub找到完整的应用程序.

编辑

正如杰夫鲍曼所说,provideTest()需要保持不变.当我创建这样的Java类时:

@Module
public class TestModule {

    @Provides
    static String provide() {
        return "foo bar";
    }
}
Run Code Online (Sandbox Code Playgroud)

有用.

所以最后一个问题:如何在Kotlin制作这个?这不起作用:

@Module
internal abstract class TestModule {

    companion object {

        @Provides
        @JvmStatic
        internal fun provideTest(): String {
            return "foo bar"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我需要另一种方法来创建一个静态方法.

Ral*_*ann 5

是的,我找到了解决方案:-)

获取static方法的Kotlin 方法是将方法放入a companion object但现在Dagger抛出一个@Provides只能在a中使用的错误@Module.为了解决这个问题我注释的companion object

@Module
internal abstract class TestModule {

    @Module
    companion object {

        @Provides
        @JvmStatic
        internal fun provideTest(): String {
            return "foo bar"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)