我是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问题,但是没有一个问题可以解决我的疑问。
任何帮助/解释将不胜感激。
答案 0 :(得分:1)
我无法理解的是Dagger 2如何为存储库提供对象,因为我在任何带有@Provides注释的模块中都没有提到它。
您正在通过使用@Inject
注释构造函数来使用构造函数注入:
[{
@Inject
]标识可注入的构造函数,方法和字段。
因此,通过添加注释,Dagger知道了构造函数,并且知道如何在需要时创建对象。
class LoginRepository @Inject constructor(..)
如果您的构造函数上没有注释,那么您需要在模块中使用一个@Provides
注释的方法,以便Dagger可以访问依赖项,但是您应该使用{ {1}}带注释的方法主要用于需要其他设置和/或初始化的对象。