2015-12-29 27 views
4

我一直在看Dagger 2中的自定義範圍(thisthis是我試圖基於我的代碼的那些),還有一件事我仍然無法理解,我發現你可以創建一個具有自定義作用域的組件,然後提供所有提供的表單,該組件所包含的模塊將與組件中的單例(組件中的單例)相同,也可以是未定義的,每次獲得時都會返回新的實例。可以匕首2的作用域比活動壽命短嗎?

但是,我仍然沒有得到的是,如果你有一個用戶範圍,然後你有一些模塊綁定到該範圍,讓說你的網絡組件是綁在它,以便網絡調用使用當前的用戶信息,如果您在註冊用戶(或登錄用戶)活動生命週期中,它是否會更改您當前標記爲@Inject的對象引用?或者當您在activity的onCreate方法中調用.inject(this)時獲得的任何實例? 或者您應該再次調用注入來獲得再次映射的引用?

在這個問題上的任何幫助,高度讚賞:)

回答

3

TL;博士你必須自己管理一切。沒有刷新,您必須重新創建或至少重新加載部分活動。

作用域提供了一些編譯時間信息,並幫助您保持代碼「可讀」。要實際交換組件,這個你必須自己做。是的,你必須圍繞此構建你的設計,相應的組件會被重新創建。

如果用戶登錄/註銷,則必須創建一個新的UserModule和引用新用戶的組件,以提供登錄/註銷對象。這是您需要爲所有未來組件引用的新組件,具體取決於它。

@Inject帶註釋的字段不會自動刷新,雖然您可以再次注入相同的字段,但對象只會被覆蓋。

在第二個link you provided他們實際上實現某種交換用戶信息。這通過將UserComponent保留在應用程序類中來完成。

+0

感謝您的回覆,是的,我認爲它必須是這樣的,這就是我目前正在做的,但是,我面臨的問題,它看起來像你不能注入到2個組件,所以我需要擁有一個存根用戶的用戶組件,然後在有真實用戶時再次注入,因爲我無法注入到我的「基本組件」,再加上「用戶組件」,它試圖從一個注入中獲取所有注入。 –

+0

這意味着'@ singleton'只是爲了澄清沒有任何真正的目的?謝謝。 – hqt

+0

@hqt任何範圍(包括單例)都只是一個解決依賴關係的名稱(如果範圍* a *取決於* b *,那麼* b *不能取決於* a *(循環)),無論它被稱爲singleton還是foo無關緊要,範圍本身封裝了「屬於」在一起的依賴關係,因爲它們(可能)彼此依賴並且具有相似的壽命 –