android - @Component.Builder 缺少所需模块或组件的设置器:[com.sample.TestComponent]
问题描述
关于上述问题,SO中有很多答案,但是我的情况不同,对我来说,缺少组件的设置器。
我有 ApplicationComponent,它依赖于来自库的其他一些组件 [TestComponent]。
@AppScope
@Component(
dependencies = [TestComponent::class],
modules = [
AppModule::class,
AndroidInjectionModule::class
]
)
interface AppComponent : AndroidInjector<MyApplication> {
override fun inject(application: MyApplication)
@ContextIO
fun getIOCoroutineContext(): CoroutineContext
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application): Builder
@BindsInstance
fun testComponent(testComponent: TestComponent): Builder
fun build(): AppComponent
}
}
和应用类
class MyApplication : DaggerApplication() {
val appComponent by lazy {
DaggerAppComponent.builder()
.application(this)
.testComponent(SdkInjectors.testComponent())
.build()
}
}
@Singleton
@Component(
modules = {VideoModule.class, AnalyticsModule.class}
)
public interface TestComponent {
// ...
}
解决方案
偶然发现了一些开源项目并发现了这一点,我不应该在创建依赖组件时使用@BindsInstance。
@AppScope
@Component(
dependencies = [TestComponent::class],
modules = [
AppModule::class,
AndroidInjectionModule::class
]
)
interface AppComponent : AndroidInjector<MyApplication> {
override fun inject(application: MyApplication)
@ContextIO
fun getIOCoroutineContext(): CoroutineContext
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application): Builder
fun testComponent(testComponent: TestComponent): Builder
fun build(): AppComponent
}
}
删除 @BindsInstance 有效,但我仍然不知道原因,如果我知道会更新。
推荐阅读
- c# - 如何实现 REST API 的观察者模式?(在前端和后端之间)
- postgresql - PostgreSQL:按顺序编号现有列外键
- javascript - 求3和5的倍数之和,JS
- c# - 单击按钮时重置组合框
- css - 对齐图片旁边的卡片文本
- python-3.x - 从 x 到 y 的索引打印 XOR 元素(XOR 范围)
- javascript - 如何在.subscribe 中调用方法?
- javascript - 从数组计算平均值并收到 NaN 错误
- node.js - AWS Lambda 在使用 nodejs aws-sdk 300 秒后没有得到响应
- javascript - Bootstrap 模型有问题吗?