如何在 dagger2 中模拟循环依赖?

How model circular dependency in dagger2?

如何使用 dagger2 对循环依赖建模? 假设我们只有两个 类。第一次注入是通过构造函数进行的,第二次是通过方法进行的,如下例所示:

class A{
    private B b;

    @Inject
    public A(B b)
    {
        this.b = b;
    }
}

class B{
    private A a;

    @Inject
    public B() { }

    @Inject
    public void injectA(A a)
    {
        this.a = a;
    }
}

据我所知你不能。

像这样的依赖关系表明 A 和 B 可能比它们应该的更紧密。合并它们或重构 C

中的公共部分

Provider<A>Provider<B> 注入其中一个,而不是直接注入 A 或 B。然后,只要两个 类 在构造函数中都不需要另一个,它就会起作用。如果他们在构造函数中都需要对方,那就没办法了。

可以使用lazy注入:

class B{
    private Lazy<A> a;

    @Inject
    public B(Lazy<A> a) {
       this.a = a;
    }
}

或者您可以注入 Provider<A>,但请注意每次调用 Provider::get 时提供者 returns A 的新实例(假设默认范围),而 Lazy::get returns 同一个实例。