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

时间:2014-05-03 17:47:47

标签: android dependency-injection square dagger

我从Square看到了匕首图书馆,我正在进行一些测试。我是DI原则的新手,所以要善良:)

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

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

Dagger注入没有其他代码编写字段的目的不是吗?我是否必须手动.inject();我的所有物品?肯定有一件事我不知道。

提前致谢。

1 个答案:

答案 0 :(得分:1)

正如你所写,Dagger支持两种注射:

  • 现场注射
  • 构造函数注入

在第一种情况下,您创建一个对象,然后使用inject方法注入字段。例如,在您的onCreate活动中,您会将其称为:

mObjectGraph.inject(this);

第二种类型的注入(构造函数注入)要求对象由Dagger创建。您只需使用@Inject注释标记构造函数,然后就可以创建如下实例:

HasInjectableConstructor instance = mObjectGraph.get(HasInjectableConstructor.class);

就是这样。也许Dagger 2会改变这件事:squ.re/dagger2