Dagger2 + ViewModel +存储库

时间:2019-06-25 11:10:41

标签: android mvvm dagger-2 android-viewmodel

我是Dagger 2的新手,正在尝试在Kotlin中实现它。在这里,我试图将我的存储库对象注入到viewmodel中。我可以通过这种方式成功注入

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注释的模块中都没有提到它。

我尝试关注许多博客,这里没有几个stckoverflow问题,但是没有一个问题可以解决我的疑问。

任何帮助/解释将不胜感激。

1 个答案:

答案 0 :(得分:1)

  

我无法理解的是Dagger 2如何为存储库提供对象,因为我在任何带有@Provides注释的模块中都没有提到它。

您正在通过使用@Inject注释构造函数来使用构造函数注入:

  

[{@Inject]标识可注入的构造函数,方法和字段。

因此,通过添加注释,Dagger知道了构造函数,并且知道如何在需要时创建对象。

 class LoginRepository @Inject constructor(..)

如果您的构造函数上没有注释,那么您需要在模块中使用一个@Provides注释的方法,以便Dagger可以访问依赖项,但是您应该使用{ {1}}带注释的方法主要用于需要其他设置和/或初始化的对象。