2017-05-04 40 views
0

我使用匕首2多層多庫 Android SDK中的項目。多層/庫架構dagger2:設計範圍,組件,模塊

我在不同的圖層上開發了許多不同的庫(數據,業務邏輯,演示文稿等),並使用匕首將它們粘合在一起。

我最重要的要求是,該建築的每個庫應該使用獨立的(帶及其相關組件),以及一個開發者應該決定的基礎上,他想要的任何層之上:

例如:

  • 使用一切下面
  • 隨意替換任何片堆疊的,以增強或改變行爲
重寫所有表示層

現在我已經爲每個庫創建了一個具有自定義作用域的Dagger組件,但有時候我有一個組件依賴於其他2-3個組件,而Dagger抱怨應該只有1個依賴組件被作用域。 (例如使用服務組件來從公司服務和傳感器組件獲得數據以獲得設備傳感器數據/連接性或其他)的域層。

我不能擺脫範圍,因爲我需要這些組件是範圍/單身。

我目前的解決方法是通過依賴組件的模塊構造,但是這看起來像一個解決辦法,我想知道什麼是接近這種要求用匕首2

複雜性的正確方法也不能很好地擴展,並且替換中間的一部分需要擴展替換實現的模塊之一,這根本不是用戶友好的。

我讀過關於子組件,但看起來像那些不能獨立使用,除非你爲每個組件編寫組件,他們還爲實際實現聲明模塊,以便它們不能被其他實現替換。

有人可以分享他們的匕首架構細說這些概念與庫項目的重點,被其他開發者用於組裝部件和組件的重用?

(這個問題has been asked最初的dagger2問題跟蹤,但被關閉指着我堆棧溢出 - 只使用模塊也是不適合的原因,這些需要的庫的用戶知道組裝的模塊,以及如何和我沒有辦法設置不強制執行特定實現的模塊依賴關係)

回答

0

對不起,但我不認爲這個想法會起作用,因爲需求有點矛盾。

即:

我不能提供的模塊,而不是組件(如在匕首2問題跟蹤線程推薦)

我最一個重要的要求是,架構的每個庫應該可以獨立使用(使用它的依賴組件),並且開發人員應該決定在他(或她)想要的任何層上建立頂層

將很難一起工程。 Dagger 2在編譯時使用靜態代碼生成。組件需要知道他們的子組件,或者,依賴組件需要知道他們的父母。要擁有一個所有用戶都在使用的交鑰匙Dagger 2解決方案,即從組件調用注入,您需要至少部分設置對象圖。這將使您很難實現您所需的模塊化。

因此,我認爲關於問題跟蹤器線程(僅提供模塊並讓消費者設置組件)的建議是正確的解決方案。您可以使用自己的範圍註釋和/或JSR-330 @Singleton等註釋來提供有關庫的使用者應如何設置其對象圖的提示。

最後,Amir Ziarati最近發佈使用匕首2.我希望它能幫助多個模塊的Android項目的例子,該鏈接是here