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