android - Dagger 2 - 注入(inject)构造函数或提供方法哪个更好?

标签 android dependency-injection dagger-2

我一直在用 Android 学习 Dagger 2。我阅读的大多数帖子都写道,使用构造函数注入(inject)优于字段和方法注入(inject)。

一头雾水,想说清楚,什么时候用Constructor注入(inject),什么时候用Field和Method注入(inject)?

最佳答案

通过构造函数注入(inject)更具可读性,您可以轻松区分 与其余部分的依赖注入(inject)相关联的类的一部分。 其次,所有的值都是从类存在的一开始就初始化的,所以你可以在初始化 block 中使用它们。

测试更清晰,您确切地知道应该为被测类提供哪些依赖项,否则您的代码将无法编译。使用字段注入(inject),您需要手动设置所有内容。

但是所有这些并不意味着没有字段或方法注入(inject)的用例。字段注入(inject)在您无法控制像 Activity 这样的实例化的 android 类中特别有用。

我也倾向于在父类(super class)中使用字段注入(inject),我为子类使用构造函数注入(inject),并且我不想用公共(public)对象污染构造函数。例如。我有 BaseViewModel,在其中我在字段上注入(inject)了 ExceptionHandler,这样我就不需要将该 ExceptionHandler 放在每个子类构造函数中,然后向上传递到基类。

关于android - Dagger 2 - 注入(inject)构造函数或提供方法哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52045714/

相关文章:

javascript - 将一个提供程序注入(inject)另一个提供程序,相同的模块 #1250

java - Dagger 2错误 "android.app.Application cannot be provided without an @Inject constructor or from an @Provides-annotated method"

android - 获取自定义标题标记信息谷歌地图

android - 如何更改 ionic 中的 android 本地通知图标?

android - E/ANDR-PERF-MPCTL : Invalid profile no. 0,仅配置文件总数 0

c# - Azure 的存储库或依赖项注入(inject)库

Android 中的 java.awt.Point 类

Angular 注入(inject) token ; 'app.config'是什么?

android - Dagger 2 - 为什么这是一个依赖循环?

java - Dagger 2 中的作用域