2016-11-21 67 views
0

所有,匕首2:生成的代碼編譯犯規

我將不勝感激一些幫助的情況我已經在那裏匕首生成的代碼實際上並不編譯。我們對子組件進行了相當詳細的設置,如下圖所示,以S結尾的組件是子組件。

A - BS

|

CS-DS

|

ES - FS

所有子含有建設者接口,就像這樣:

@Subcomponent(modules = BS_Module.class) 
public interface BS { 
    @Subcomponent.Builder 
    public interface Builder { 
     Builder requestModule(BS module); 

     BS build(); 
    } 
} 

在A用模塊我有以下以訪問其他組件:

@Provides 
@Singleton 
@Inject 
public BS provideBS(Provider<BS.Builder> builder) { 
    return builder.get().build(); 
} 

整件事情生成得很好,但是爲provideB生成的代碼不能編譯:

@Override 
public BS provideBS() { 
    return new BSImpl(); 
} 

然而BSImpl行得有一個零個參數的構造,唯一的:

private BSImpl(BSBuilder builder) {...} 

希望我做的情況有所明確,理解,因爲我不知道怎麼去解決這個任何幫助。

解決

我圖周圍走錯了路的依賴...... A不能直接依賴於提供什麼BS,BS只能依靠什麼A提供。

+0

您能否請您發佈編譯錯誤?另外,如果你使用標準的Java類名,它可以幫助讀者解決你的問題。 –

+0

@DavidRawson根據你的建議修正了類名。錯誤消息非常簡單:類BSImpl中的構造函數BSImpl不能應用於給定的類型;要求:BSBuilder,找到:沒有參數,原因:實際和正式參數列表的長度不同。 –

+0

@DavidRawson根據您的第二條評論。你不能實際實例化構建器,因爲Dagger將它創建爲私有內部類 –

回答

0

解決的評論:

@DavidRawson最終卻是相當簡單的。我以錯誤的方式得到了依賴關係圖...... A不能直接依賴於BS提供什麼,BS只能依賴於A提供的內容。現在剩下的唯一東西是找出示波器,因爲我無法讓BS提供由於A重複範圍而產生的單態。 - Michel Onstein