簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM