我想用雙模式來獲取文件,fileOutputStream
,fileIntputStream
的實例,所以我創建了一個模塊,並提供所有三個依賴,但由於文件對象需要一個路徑我通過它作爲一個param
。匕首2注入參數
@Provides
File provideFile(String filePath){
return new File(filePath);
}
@Provides
FileOutputStream provideFileOutputStream(String filePath){
return new FileIntputStream(provideFile(filePath));
}
@Provides
FileIntputStream provideFileIntputStream(String filePath){
return new FileIntputStream(provideFile(filePath));
}
然後我得到這個以下錯誤:
"@inject constructor or from an @provides-annotated method. java.lang.string is injected"
在一些研究,我碰到「Newables」的理念,以「注射劑」,並因爲字符串是newable即其不具有固定的實現,我們需要手動調用它,如果因此di不能推斷使用哪個對象,所以我的問題是可以用來創建在編譯時已知的params
對象,如果是的話,那麼點它只是爲了創建具有靜態/固定參數的對象。
對不起,我的問題,我剛開始學習迪,所以只允許的參數是可以被注入的參數,即它們在編譯時被設置,例如:在改進的構建器中注入okHttpClient,並且我查了幾個地方但無法理解@Named如何工作,請您詳細說明一下 – Nsnik
如果您想提供2種相同類型,請使用@Proxy和@ Named(「name」)對提供者進行註釋。然後當你注入它時,你注入了@ Named(「name」),所以它知道注入哪一個。例如@ Provide @ Named(「baseUri」)public void StringBaseUri(){return「http://example.com/」;} –