什么" Dagger将根据请求注入这些字段,但不会创建新实例"手段?

时间:2015-11-08 08:09:18

标签: android dependency-injection dagger-2

在Dagger2的文档中,它说

  

如果您的班级有@Inject-annotated字段但没有@Inject-annotated   构造函数,Dagger将根据请求注入这些字段,但会   不创建新实例。添加一个无参构造函数   @Inject注释指示Dagger可以创建实例   好。

如何注入字段但不创建新实例?有什么区别?

1 个答案:

答案 0 :(得分:9)

“如果请求”表示“如果手动注入”,即对象由您或某个框架创建(想想Android和Activities对象),然后调用'DaggerMyComponent.inject(myObject);'。

另一方面,当您提供@Inject带注释的构造函数时,Dagger将能够实例化此类本身的对象,因此您的类可能位于依赖图的中间,并且Dagger将自动为您创建对象。

通常在Android中,您只能手动注入由android创建/销毁的对象(即您不控制其生命周期),如应用程序,活动,服务等。

如果您不小心错过某些类构造函数上的@Inject注释,您也不必担心。如果你的类是图形的中间部分,Dagger会发现存在不满足的依赖关系,并且编译失败会出现相应的错误。