2017-03-31 43 views
0

我正在學習dagger2依賴注入框架。我喜歡它如何注入依賴。我讀這篇文章https://github.com/codepath/android_guides/wiki/Dependency-Injection-with-Dagger-2我看到他們在兩個Modules的幫助下解釋了這一點。如何在Dagger2中實例化我們的依賴關係圖的一個實例

AppModule & NetModule是兩個Modules。既有構造函數,所以他們實例化的依賴圖的一個實例是這樣

mNetComponent = DaggerNetComponent.builder() 
       // list of modules that are part of this component need to be created here too 
       .appModule(new AppModule(this)) // This also corresponds to the name of your module: %component_name%Module 
       .netModule(new NetModule("https://api.github.com")) 
       .build(); 

假設我有一個更Modules不具有構造函數,然後我將如何對其進行初始化,其他2個模塊需要在構造函數值?

感謝

回答

2

如果你的第三個模塊不需要構造Dagger2會自動將其添加到組件,如果你在@Componentmodules這樣列出來:

@Component(modules = { 
    AppModule.class, 
    NetModule.class, 
    ThirdModule.class // module without constructor 
}) 
public interface NetComponent{ 
    // ... 
} 
+0

我正在使用最新版本的匕首,它說'.appModule(新的AppModule(this)) .netModule(新的NetModule(「」))'已棄用 –

+0

@Williams當Dagger2可以構建你的模塊本身。如果你使用'@ Module'註釋的類具有所有的依賴關係(本身,來自相同組件的其他模塊或其他組件在父組件中被列爲依賴關係),並且具有缺省或公共無參數構造函數Dagger可以實例化模塊,而無需手動設置調用'.someModule(new SomeModule()'是多餘的)。 –

+0

在我的情況下,我在兩個模塊中都有一個參數構造函數,它爲什麼仍然發出警告 –

0

比方說,你的第三個模塊是TestModule:

你可以簡單地這樣做:

mNetComponent = DaggerNetComponent.builder()   
       .appModule(new AppModule(this)) 
       .netModule(new NetModule("https://api.github.com")) 
       .testModule(new TestModule()) 
       .build(); 

注:此處.testModule會給你棄用警告,這意味着你甚至不必定義沒有構造函數的模塊。它們隱式添加到圖中。

+0

好你能幫我,使我瞭解' dagger2'創建依賴圖? –

+0

你需要谷歌。那裏有很多教程。 –

相關問題