必须设置模块
Module must be set
我尝试使用目前有效的新 Dagger Android injection thing。
现在我想扩展它以满足我的需要。
在我的 MainActivityModule
I added a 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
我查看了生成的源代码,但找不到我必须做什么的提示。我也在 Google 搜索过这个,但只找到了简单的例子:-(
我忘记了什么?您可以在 GitHub.
找到完整的应用程序
编辑
正如 Jeff Bowman 所说,provideTest()
需要是静态的。当我像这样创建 Java class 时:
@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
只能用于 [=] 14=]。为了解决这个问题,我也注释了 companion object
@Module
internal abstract class TestModule {
@Module
companion object {
@Provides
@JvmStatic
internal fun provideTest(): String {
return "foo bar"
}
}
}
另一种解决方案更简洁,以防您需要在测试中模拟/替换依赖项,避免使 class 抽象化,并保持提供不是静态的,如下所示:
@Module
internal class TestModule {
@Provides
internal fun provideTest(): String {
return "foo bar"
}
}
我尝试使用目前有效的新 Dagger Android injection thing。
现在我想扩展它以满足我的需要。
在我的 MainActivityModule
I added a 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
我查看了生成的源代码,但找不到我必须做什么的提示。我也在 Google 搜索过这个,但只找到了简单的例子:-(
我忘记了什么?您可以在 GitHub.
找到完整的应用程序编辑
正如 Jeff Bowman 所说,provideTest()
需要是静态的。当我像这样创建 Java class 时:
@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
只能用于 [=] 14=]。为了解决这个问题,我也注释了 companion object
@Module
internal abstract class TestModule {
@Module
companion object {
@Provides
@JvmStatic
internal fun provideTest(): String {
return "foo bar"
}
}
}
另一种解决方案更简洁,以防您需要在测试中模拟/替换依赖项,避免使 class 抽象化,并保持提供不是静态的,如下所示:
@Module
internal class TestModule {
@Provides
internal fun provideTest(): String {
return "foo bar"
}
}