Kotlin中Dagger中带注释绑定之间的依赖循环
上下文 我有一个使用Dagger(2.27版)用Kotlin编写的Android应用程序。在我的测试中,我创建了一些依赖项的真实实例,其中一些依赖项Kotlin中Dagger中带注释绑定之间的依赖循环,kotlin,annotations,cycle,dagger,Kotlin,Annotations,Cycle,Dagger,上下文 我有一个使用Dagger(2.27版)用Kotlin编写的Android应用程序。在我的测试中,我创建了一些依赖项的真实实例,其中一些依赖项@InjectaCoroutineDispatcher @Singleton @Component(modules = [RepositoryTestModule::class]) interface TestComponent { fun inject(...) @Component.Factory interface F
@Inject
aCoroutineDispatcher
@Singleton
@Component(modules = [RepositoryTestModule::class])
interface TestComponent {
fun inject(...)
@Component.Factory
interface Factory {
fun create(
@BindsInstance @TestIODispatcher ioDispatcher: CoroutineDispatcher) : TestComponent
}
}
目标
允许我的测试选择性地指定Dagger的测试组件使用的测试CoroutineDispatcher
。有些测试不需要额外的配置,它们应该自动获得预定义的测试调度程序
如何
我有一个模块,它为@TestIODispatcher-CoroutineDispatcher
公开@BindsOptionalOf
- 当测试需要自定义调度程序时,它可以在TestComponent的工厂内手动绑定它
- 当测试不需要任何自定义调度程序时,它应该自动获取TestCoroutineDispatcher()
DaggerAppNameViewModelTest_TestComponent
.factory()
.create(Dispatchers.IO)
问题
我的测试编译失败,出现[Dagger/DependencyCycle]错误
public static abstract interface TestComponent {
^
java.util.Optional<kotlinx.coroutines.CoroutineDispatcher> is injected at
com.example.<appname>.repository.RepositoryTestModule.Companion.coroutineDispatcher(testIODispatcher)
kotlinx.coroutines.CoroutineDispatcher is injected at
...
公共静态抽象接口TestComponent{
^
java.util.Optional在
com.example..repository.RepositoryTestModule.Companion.coroutineDispatcher(testIODispatcher)
kotlinx.coroutines.CoroutineDispatcher在
...
我没有看到依赖循环,因为我的@IODispatcher-CoroutineDispatcher
依赖于@TestIODispatcher-CoroutineDispatcher
,它被测试显式绑定
我的理论是Kotlin以某种方式去掉注释,然后通过类型比较绑定。在这种情况下,确实会有一个循环
我是否错过了一个明显的循环,或者我需要对注释做些什么
public static abstract interface TestComponent {
^
java.util.Optional<kotlinx.coroutines.CoroutineDispatcher> is injected at
com.example.<appname>.repository.RepositoryTestModule.Companion.coroutineDispatcher(testIODispatcher)
kotlinx.coroutines.CoroutineDispatcher is injected at
...