<分区>
如何在我的Android项目中使用Dagger,使用它的主要目的是什么?我在谷歌上搜索了它,但我不清楚。所以如果可能的话,请给我最好的解决方案和一个例子。
标签 android
<分区>
如何在我的Android项目中使用Dagger,使用它的主要目的是什么?我在谷歌上搜索了它,但我不清楚。所以如果可能的话,请给我最好的解决方案和一个例子。
最佳答案
许多 Android 应用依赖于实例化通常需要其他依赖项的对象。例如,可以使用 Retrofit 等网络库构建 Twitter API 客户端。要使用这个库,您可能还需要添加解析库,例如 Gson。此外,实现身份验证或缓存的类可能需要访问共享首选项或其他公共(public)存储,需要首先实例化它们并创建固有的依赖链。
Dagger 2 会为您分析这些依赖关系并生成代码以帮助将它们连接在一起。虽然还有其他 Java 依赖项注入(inject)框架,但其中许多框架在依赖 XML 方面存在局限性,需要在运行时验证依赖项问题,或者在启动期间导致性能下降。 Dagger 2 完全依赖于使用 Java 注释处理器和编译时检查来分析和验证依赖关系。它被认为是迄今为止构建的最高效的依赖注入(inject)框架之一。
优点
这里列出了使用 Dagger 2 的其他优点:
简化对共享实例的访问。正如 ButterKnife 库使定义对 View 、事件处理程序和资源的引用变得更容易一样,Dagger 2 提供了一种获取对共享实例的引用的简单方法。例如,一旦我们在 Dagger 中声明了我们的单例实例,例如 MyTwitterApiClient 或 SharedPreferences,我们就可以使用简单的 @Inject 注释声明字段:
public class MainActivity extends Activity {
@Inject MyTwitterApiClient mTwitterApiClient;
@Inject SharedPreferences sharedPreferences;
public void onCreate(Bundle savedInstance) {
// assign singleton instances to fields
InjectorClass.inject(this);
}
}
复杂依赖项的轻松配置。对象的创建通常有一个隐含的顺序。 Dagger 2 遍历依赖关系图并生成既易于理解又易于跟踪的代码,同时还使您无需编写通常需要手动编写的大量样板代码来获取引用并将它们作为依赖项传递给其他对象.它还有助于简化重构,因为您可以专注于构建哪些模块,而不是关注它们的创建顺序。
更轻松的单元和集成测试因为依赖关系图是为我们创建的,所以我们可以轻松地换出进行网络响应的模块并模拟此行为。
Scoped instances 您不仅可以轻松管理可以持续整个应用程序生命周期的实例,还可以利用 Dagger 2 定义生命周期较短的实例(即绑定(bind)到用户 session 、 Activity 生命周期等)。
关于android - 什么是 Dagger ?我们为什么要使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41820133/