我想用双模式来获取文件,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/”;} –