![](/img/trans.png)
[英]How to pass the current activity to be Injected to an Object in Dagger2
[英]Dagger2 How to make Injected Object know who created it
例如,我有:
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 ...
注入這個的正確方法是什么? 還是在這種情況下應該避免注射?
新思路:也許我可以將創建的對象(a和b)保存在dagger模塊中,並在調用Provide方法時,返回保存的實例而不是創建一個新實例。 這應該與使用@Singleton相同,但在我看來,當調用provide方法時仍會調用該構造函數。(當調用A的構造函數時,會產生堆棧溢出問題。)擔心將變量保存在dagger模塊中是一種不好的做法。
發現了“依賴注入的核心原理:一個類不應該知道如何注入它”。 在https://google.github.io/dagger/android.html
除非有人來告訴我我錯了,否則我將假設注入的對象不應該知道其父對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.