Dagger 2-注入构造函数或提供方法会更好吗?

时间:2018-08-27 19:17:25

标签: android dependency-injection dagger-2

我一直在用Android学习Dagger 2。我阅读的大多数文章都写道,最好使用构造函数注入而不是使用字段注入和方法注入。

我很困惑,想弄清楚,什么时候应该使用构造函数注入,什么时候应该使用字段和方法注入?

2 个答案:

答案 0 :(得分:1)

构造函数的注入更具可读性,您可以轻松区分 类中与其余部分的依赖项注入相关的部分。 其次,所有值都是从类存在的开始就初始化的,因此您可以将其用于例如初始化块中。

测试更加简洁,您完全知道应该为被测类提供哪些依赖项,否则代码将无法编译。使用现场注入,您需要手动设置所有内容。

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

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

答案 1 :(得分:0)

我认为经验法则是仅对系统实例化的框架类而不是开发人员使用Activity Fragment等进行字段注入(因为您不能说实例化{ {1}}。

使用构造函数注入进行其他所有操作,为什么首选构造函数注入的好处之一是,它易于进行单元测试-您仍然可以使用该构造函数“手动”实例化您的类。

至少对我而言,构造函数注入感觉更“自然” /面向对象-依赖关系在构造函数中传递,并由类传递给类以处理所需的内容,字段注入就像来自外部的某个人而来,“推“注入类中的这些依赖项