gpt4 book ai didi

android - Dagger2 不能在 android 中工作

转载 作者:行者123 更新时间:2023-11-30 00:35:47 25 4
gpt4 key购买 nike

我在使用 dagger2 时遇到问题

我创建组件、模块、提供

class testModule {
@Provides @Singleton
fun provideTestServer(): TestService {
}
}

我在 MainActivity 中调用了 onCreate()

DaggerImageComponent.builder().build().inject(this)

这是我的问题DI 在 MainActivity 中运行良好

class MainActivity: AppCompatActivity {
@Inject
lateinit var testService: TestService
}

但是其他文件不工作。

object TestObject {
@Inject
@JvmSynthetic // error: static field cannot inject
lateinit var testService: TestService
fun test() = testService.testfun()
}

@Singleton
class TestClass {
@Inject
lateinit var testService: TestService
fun test() = testService.testfun()
}

TestClass 和 TestObject 出错 - lateinit 属性 testInterface 尚未初始化

我不明白为什么在 TestClass, TestObject 中会出现错误。

最佳答案

您应该在要获取注入(inject)变量的类中调用“注入(inject)”。你为 MainActivity 做了这件事,但你也应该将你的组件注入(inject)到其他类中。顺便说一下,你有 TestClass,看起来你在客户端代码中也使用了它,因为它有“Singleton”注释。如果是这样 - 您只需在模块中为其添加提供程序并将服务作为构造函数参数传递:

class testModule {
@Provides @Singleton
fun provideTestServer(): TestService {
}

@Provides @Singleton
fun provideTestServer(testService: TestService): TestClass {
}
}

那么,你的 TestClass 应该有构造函数:

class TestClass(var testService: TestService) {
fun test() = testService.testfun()
}

我建议你再次阅读有关 Dagger 的内容,查看本教程: http://www.vogella.com/tutorials/Dagger/article.html

关于android - Dagger2 不能在 android 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43433073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com