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)
所以我需要另一种方法来创建一个静态方法.
是的,我找到了解决方案:-)
获取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)
| 归档时间: |
|
| 查看次数: |
799 次 |
| 最近记录: |