Android Dagger2+视图模型+存储库

Android Dagger2+视图模型+存储库,android,mvvm,dagger-2,android-viewmodel,Android,Mvvm,Dagger 2,Android Viewmodel,我是新手匕首2,并试图在科特林实现它。在这里,我尝试将我的存储库对象注入到viewmodel中。我成功地以这种方式注入了它 public class LoginViewModel @Inject constructor(var mApplication: Application, var repository: LoginRepository) : ViewModel() { 这就是我的存储库的外观 class LoginRepository @Inject constructor(val

我是新手匕首2,并试图在科特林实现它。在这里,我尝试将我的存储库对象注入到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)
}
这就是我的模块的外观

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

我试着关注很多博客,这里很少有问题,但没有一个能解决我的疑问

如有任何帮助/解释,将不胜感激

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

您正在使用构造函数注入,方法是使用以下内容注释构造函数:

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

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

 class LoginRepository @Inject constructor(..)

如果您的构造函数上没有注释,那么您需要在模块中使用@Providers注释方法,以便Dagger可以访问依赖项,但您应该主要为需要额外设置和/或初始化的对象使用@提供带注释的方法。

您在@Module class中声明了它吗?没有。为了清晰起见,添加有问题的模块类。好的,我也不熟悉kotlin。。我没有注意到我自己正在用@Inject标记LoginRepository构造函数。谢谢你的回答