作者:海尔兄弟 | 来源:互联网 | 2023-01-31 14:41
我有两个班,Foo
和Bar
,这是互相依赖的,以及各种其他类.我使用Dagger-2进行依赖注入,但如果我天真地添加循环依赖,Dagger会在运行时遇到堆栈溢出.什么是重构类来解决这个问题的好方法,同时仍然使用Dagger注入所有其他依赖项,并且对现有调用的重复和更改最少?
1> EpicPandaFor..:
简单的方法是Lazy
在一边使用.
Lazy foo;
@Inject
Bar(Lazy foo) {
this.foo = foo;
}
// use foo.get(); when needed
请注意,如果你使用kotlin,你应该导入`dagger.Lazy`而不是`kotlin.Lazy`.
如果仅在实际使用get()时调用它,则一侧会初始化自身,而另一侧只会初始化*以后*。只是不要在构造函数中调用`.get()`。我之前已经做过了,而且可行,但这是简单的方法。