Android-运行时使用Dagger创建对象

Android-运行时使用Dagger创建对象,android,dependency-injection,square,dagger,Android,Dependency Injection,Square,Dagger,我在Square偶然发现了匕首库,目前正在做一些测试。我不熟悉DI原则,所以请友善:) 所以,我知道Dagger可以注入字段和构造函数。我也知道,在我的活动中,我必须.inject(this)以便可以在运行时进行注入。 但是在活动初始化之后需要创建的对象O呢 如果O有可注入字段,我必须.inject(O)在使用它之前,否则当访问它的注入变量时,我会得到一个NullPointerException。但是如果我写一个可注入的构造函数,没有问题,没有运行时异常。 当然,我根据文档编写了@Module

我在Square偶然发现了匕首库,目前正在做一些测试。我不熟悉DI原则,所以请友善:)

所以,我知道Dagger可以注入字段和构造函数。我也知道,在我的活动中,我必须
.inject(this)以便可以在运行时进行注入。
但是在活动初始化之后需要创建的对象O呢

如果O有可注入字段,我必须
.inject(O)
在使用它之前,否则当访问它的注入变量时,我会得到一个
NullPointerException
。但是如果我写一个可注入的构造函数,没有问题,没有运行时异常。 当然,我根据文档编写了@Module

Dagger的目的不是在没有其他代码编写的情况下注入字段吗?我是否必须手动
.inject()所有我的对象?我肯定错过了一件事


提前感谢。

正如您所写,Dagger支持两种注射方式:

  • 现场注入
  • 构造函数注入
在第一种情况下,创建一个对象,然后使用
inject
方法注入字段。例如,在活动的
onCreate
中,您将称之为:

mObjectGraph.inject(this);
第二种类型的注入(构造函数注入)要求对象由Dagger创建。只需使用
@Inject
注释标记构造函数,即可创建如下实例:

HasInjectableConstructor instance = mObjectGraph.get(HasInjectableConstructor.class);
就这样。也许匕首2会改变这件事: