如何在仍然使用Dagger2的同时解决循环依赖?

Jes*_*t Z 12 circular-dependency dagger dagger-2

我有两个班,Foo<T>Bar,这是互相依赖的,以及各种其他类.我使用Dagger-2进行依赖注入,但如果我天真地添加循环依赖,Dagger会在运行时遇到堆栈溢出.什么是重构类来解决这个问题的好方法,同时仍然使用Dagger注入所有其他依赖项,并且对现有调用的重复和更改最少?

Epi*_*rce 29

简单的方法是Lazy<T>在一边使用.

Lazy<Foo> foo;

@Inject
Bar(Lazy<Foo> foo) {
    this.foo = foo;
}

// use foo.get(); when needed
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果你使用kotlin,你应该导入`dagger.Lazy`而不是`kotlin.Lazy`. (8认同)
  • 如果仅在实际使用get()时调用它,则一侧会初始化自身,而另一侧只会初始化*以后*。只是不要在构造函数中调用`.get()`。我之前已经做过了,而且可行,但这是简单的方法。 (3认同)