我正在使用 Dagger 2 创建一个基本的 Android 应用程序。在我遇到Jake Wharton 的这篇精彩演讲之前,我很难理解如何正确使用它。在其中,他演示了使用 Dagger 2 和“Tweeter”应用程序。在~22:44,他展示了应用程序的@Inject字段可以满足注入方法。他后来展示了一个简单的 Android 实现。
我的应用的 ViewModel 依赖于存储库类。我正在使用 Dagger 2 通过 Application 类将此存储库注入 ViewModel,如下所示:
//In my Dagger 2 component
@Singleton
@Component(module = {MyRepositoryModule.class})
public interface MyRepositoryComponent{
void inject(MyViewModel viewModel);
}
//In MyApplication
public class MyApplication extends Application{
private MyRepositoryComponent repoComponent;
//Instantiate the component in onCreate...
public MyRepositoryComponent getMyRepositoryComponent(){
return repoComponent;
}
}
//Finally, in my ViewModel
public MyViewModel extends AndroidViewModel{
@Inject
public MyRepository repo;
public MyViewModel(@NonNull MyApplication app){
repo = app.getMyRepositoryComponent().inject(this);
}
}
我采用这种方法是因为我可以覆盖 MyApplication 类并使用假组件进行测试(这是我的主要目标之一)。以前,我能够注入依赖项的唯一方法是在 ViewModels 中构建我的组件,这使得无法用假货替代。
对于这样一个简单的应用程序,我知道我可以取消注入方法并在 MyApplication 类中保存对存储库的引用。但是,假设有更多依赖项需要担心,这是否是一种常见/良好/测试友好的方法来为 Android 中的活动和 ViewModels 注入依赖项?
拉莫斯之舞
相关分类