在Dagger2的文档中,它说
如果您的班级有@Inject-annotated字段但没有@Inject-annotated 构造函数,Dagger将根据请求注入这些字段,但会 不创建新实例。添加一个无参构造函数 @Inject注释指示Dagger可以创建实例 好。
如何注入字段但不创建新实例?有什么区别?
答案 0 :(得分:9)
“如果请求”表示“如果手动注入”,即对象由您或某个框架创建(想想Android和Activities对象),然后调用'DaggerMyComponent.inject(myObject);'。
另一方面,当您提供@Inject带注释的构造函数时,Dagger将能够实例化此类本身的对象,因此您的类可能位于依赖图的中间,并且Dagger将自动为您创建对象。
通常在Android中,您只能手动注入由android创建/销毁的对象(即您不控制其生命周期),如应用程序,活动,服务等。
如果您不小心错过某些类构造函数上的@Inject
注释,您也不必担心。如果你的类是图形的中间部分,Dagger会发现存在不满足的依赖关系,并且编译失败会出现相应的错误。