例如我有:
Public Class A extends Parent{
@Inject B b;
public A(){
DaggerAppComponent.create().inject(this); //inject b here
}
public void doStuff(){
b.start();
}
@Override
public void onDone(){
Log.v(TAG, "done");
}
}
和B组:
Public Class B{
private Parent parent;
Public B(Parent parent){
this.parent = parent;
}
public void start(){
parent.onDone();
}
}
我的问题是如何将A类实例传递给B类?在匕首AppModule中,我为A类和B类提供了方法:
@Module
Public AppModule{
@Provide
@Singleton
A provideA(){
return new A();
}
@Provide
B provideB(A a){
return new B(A a);
}
}
使用此代码,我得到循环依赖,导致堆栈溢出错误。当创建A时,A尝试注入B,并且当provide方法创建B ...
时创建新的A.正确的注射方法是什么?或者我应该在这种情况下避免注射?
新想法: 也许我可以在dagger模块中保存创建的对象(a和b),并且当调用provide方法时,返回已保存的实例而不是创建新实例。这应该与使用@Singleton相同,但在我看来,在调用provide方法时仍然会调用构造函数。(当调用A的构造函数时,它会产生堆栈溢出问题。)而且我'我还担心在匕首模块中保存变量是一种不好的做法。
答案 0 :(得分:0)
发现这个"依赖注入的核心原则:一个类不应该知道如何注入它。"在https://google.github.io/dagger/android.html
除非有人上前告诉我,我错了,否则我会假设注入的对象不应该知道它的父母。