我对Dagger 2很陌生,并试图在Kotlin实现它。在这里,我试图将我的存储库对象注入视图模型。我能成功地用这种方式注射
public class LoginViewModel @Inject constructor(var mApplication: Application, var repository: LoginRepository) :
ViewModel() {这就是我的存储库的样子
class LoginRepository @Inject constructor(val retrofit: APICallInterface) {这就是我的模块的样子
@Module
class BaseModule {
@Provides
fun getRetrofit(): APICallInterface {
return Retrofit.Builder()
.baseUrl("https://samples.openweathermap.org/data/2.5/")
.addConverterFactory(GsonConverterFactory.create())
.build().create(APICallInterface::class.java)
}我无法理解的是,Dagger 2是如何为存储库提供对象的,因为我在任何带有@Provides注释的模块中都没有提到它。
我试着跟踪了很多博客,这里也没有一些垃圾溢出的问题,但是没有一个能解决我的疑问。
如有任何帮助/解释,将不胜感激。
发布于 2019-06-25 12:23:11
我无法理解的是,Dagger 2是如何为存储库提供对象的,因为我在任何带有@Provides注释的模块中都没有提到它。
通过用@Inject注释构造函数来使用构造函数注入
@Inject标识可注入的构造器、方法和字段。
因此,通过添加注释,Dagger可以了解构造函数,并知道如何在需要时创建对象。
class LoginRepository @Inject constructor(..)如果构造函数上没有注释,那么需要模块中的@Provides注释方法,以便Dagger可以访问依赖项,但是您应该主要针对需要额外设置和/或初始化的对象使用@Provides注释方法。
https://stackoverflow.com/questions/56752759
复制相似问题