我的目標:Dagger2子組件混亂
要了解的範圍是如何工作的,以及如何實現一個UserScope
,我可以用在多個活動和復位/根據需要創建一個新的。
方法我使用:
此博客:http://frogermcs.github.io/building-userscope-with-dagger2/
它顯然解釋說,我想在這裏實現了同樣的事情。官方文檔 http://frogermcs.github.io/building-userscope-with-dagger2/
快速簡短的博客
顯然,有UserModule
和UserComponent
。作者已將UserComponent
的創作包裝在UserManager
之下,其中有ApplicationScope
。所以UserManager
在登錄時可用。登錄成功時UserComponent
通過UserManager
進行初始化。簡單的邏輯。
現在這個已經初始化的@UserScope
用於兩個活動中,如圖所示。
什麼,我努力理解
在UserComponent
看看。
public interface UserComponent {
@Subcomponent.Builder
interface Builder {
Builder sessionModule(UserModule userModule);
UserComponent build();
}
UserDetailsActivityComponent plus(UserDetailsActivityComponent.UserDetailsActivityModule module);
RepositoriesListActivityComponent plus(RepositoriesListActivityComponent.RepositoriesListActivityModule module);
LogoutManager logoutManager();
}
具體地說UserDetailsActivityComponent
和RepositoriesListActivityComponent
通過UserComponent
創建。與此類似,
@Override
protected void onUserComponentSetup(UserComponent userComponent) {
userComponent.plus(new UserDetailsActivityComponent.UserDetailsActivityModule(this)).inject(this);
}
所以他們第一次打通UserManager
在UserComponent
預先創建的,然後它調用onUserComponentSetup
然後創建相應的組件和注入電流活動。
我失敗了與上述這種模式去理解,我在我們使用plus(InjectionToBeDoneOn i)
當我們需要對InjectionToBeDoneOn
特定實例的注射的文檔已經閱讀。但爲什麼通過這個組件注入這個Activity?這完成了什麼?用DaggerXYZComponent().Builder().Build().inject(activity)
這個活動的onCreate()
這個傳統方式做這個沒有意義嗎?
此外,我缺少如何在Android中實現UserScope
的體面材料,它具有從登錄到登出但不大於@Singleton
範圍的使用期限。
這很有道理。謝謝。 但'UserModule'沒有'UserDetailsActivityComponent'的'subcomponents'屬性,就像它在Docs中提到的一樣,但UserDetailsActivityComponent'仍然可以作爲UserComponent的子組件? – Ankit
@Ankit我不太明白你在說什麼。你能否詳細說明你的問題? –
這是來自文檔, '要將子組件添加到父組件,請將子組件類添加到父組件安裝的@Module的子組件屬性中。然後,子組件的構建器可以在父組件中請求,即'@Module(subcomponents = RequestComponent.class)' – Ankit