嘿,我有三个组成部分:
应用程序 - >提供上下文(例如LocationUsecase)
ApiService - >提供Retrofit(休息电话)
有时我想在ViewModel中使用多个组件
- 但是我遇到了异常,我可能.inject(ViewModel)
对许多组件都没有UserViewModel{
@Inject ApiService api;
@Inject DatabaseService db;
public User(){
Application.getApiComponent.inject(this)
Application.getDBComponent.inject(this)
}
}
。
@PerApplication
@Component(dependencies = {DBComponent.class, RestApiComponent.class},
modules = {ApplicationModule.class})
public interface ApplicationComponent{...}
@DbScope
@Component(modules = {DBModule.class})
public interface DBComponent {...}
@RestScope
@Component(modules = {RestApiRetrofitModule.class})
public interface RestApiComponent {...}
因为我希望将组件拆分(用于测试目的) 我决定向ApplicationComponent添加依赖项,并在注入Application时能够使用albo DB和REST
{{1}}
这次我遇到编译ERROR:
PerApplication ApplicationComponent依赖于多个作用域组件: @DbScope DBComponent @RestScope RestApiComponent
问题在于,当人们使用多于一种依赖性时,我没有找到任何例子 - 它是否受到限制? 当我删除DBComponent的 @Scope 时没关系 - 但是我有一个未编译的实例,它会在每次新实例时返回 当我从依赖项中删除一个组件时,我也将构建没有错误。
我如何在我的组件中使用两个依赖项?
答案 0 :(得分:2)
你几乎就在那里 - dependencies =
需要进入依赖(子)组件
@PerApplication
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent{...}
@DbScope
@Component(dependencies = ApplicationComponent.class, modules = DBModule.class)
public interface DBComponent {...}
@RestScope
@Component(dependencies = ApplicationComponent.class, modules = RestApiRetrofitModule.class)
public interface RestApiComponent {...}
现在只需确保公开ApplicationComponent
模块集中绑定的依赖项,以便依赖组件可以使用它们。
因此,如果您在SharedPreferences
级别绑定ApplicationComponent
并希望与依赖组件共享该依赖关系,则需要在ApplicationComponent
@Component
public interface ApplicationComponent {
SharedPreferences exposeSharedPreferences();
}
此外,您可能希望重新考虑为DB和REST创建范围 - 这些更像是功能分组,您可以通过模块实现所需的分离。
您通常只需要Android应用中的几个范围 - @PerApp
和@PerActivity
范围,因为范围跟踪生命周期,这是两个主要的生命周期。