首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dagger2 + ViewModel +仓库

Dagger2 + ViewModel +仓库
EN

Stack Overflow用户
提问于 2019-06-25 11:10:41
回答 1查看 112关注 0票数 0

我对Dagger 2很陌生,并试图在Kotlin实现它。在这里,我试图将我的存储库对象注入视图模型。我能成功地用这种方式注射

代码语言:javascript
复制
public class LoginViewModel @Inject constructor(var mApplication: Application, var repository: LoginRepository) :
ViewModel() {

这就是我的存储库的样子

代码语言:javascript
复制
 class LoginRepository @Inject constructor(val retrofit: APICallInterface) {

这就是我的模块的样子

代码语言:javascript
复制
@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注释的模块中都没有提到它。

我试着跟踪了很多博客,这里也没有一些垃圾溢出的问题,但是没有一个能解决我的疑问。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-25 12:23:11

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

通过用@Inject注释构造函数来使用构造函数注入

@Inject标识可注入的构造器、方法和字段。

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

代码语言:javascript
复制
 class LoginRepository @Inject constructor(..)

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56752759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档