我现在正在研究Dagger 2(Java),但是一开始就遇到了问题。不幸的是,我在Dagger 2文档或Stackoverflow上还没有找到任何关于此问题的信息,所以如果您知道一些资源,我将非常感激。
我在这个存储库中准备了一个最小的示例来解释我的问题:https://github.com/stackoverflow-samples/dagger2-dependency-cycle
所以我们有一个 Application 类应该被构建
public class Application {
@Inject
public Application(SomeDependency one) {
}
public static void main(String[] args) {
DaggerApplicationComponent.create().build();
}
}
...带有虚拟依赖
public class SomeDependency {
@Inject
public SomeDependency() {
}
}
当然,Dagger类/接口也是必不可少的... ..一个组件接口:
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {
Application build();
}
...和一个模块:
@Module
abstract class ApplicationModule {
@Provides
static SomeDependency provideDepdendencyOne() {
return new SomeDependency();
}
}
我不明白的是为什么Dagger强制要求我使用
@Provides
注解注册SomeDependency
,而不允许我通过@Binds
进行注册。@Binds
abstract SomeDependency bindDepdendencyOne(SomeDependency one);
每当我将代码从
@Provides
更改为@Binds
时,它会给我以下错误:[Dagger/DependencyCycle] Found a dependency cycle:
io.github.codejanovic.dagger2.example.SomeDependency is injected at
io.github.codejanovic.dagger2.example.ApplicationModule.bindDepdendencyOne(one)
io.github.codejanovic.dagger2.example.SomeDependency is injected at
io.github.codejanovic.dagger2.example.Application(one)
io.github.codejanovic.dagger2.example.Application is provided at
io.github.codejanovic.dagger2.example.ApplicationComponent.build()
我完全无法理解为什么不能@Bind
一个实现。我忽略了什么吗?
提前致谢。