2

我遇到了 Square 的 dagger 库,目前正在做一些测试。我是 DI 原则的新手,所以请善待 :)

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

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

Dagger 的目的不是注入没有其他代码可写的字段吗?我是否必须手动操作.inject();所有对象?肯定有我想念的东西。

提前致谢。

4

1 回答 1

1

正如您所写,Dagger 支持两种注入:

  • 场注入
  • 构造函数注入

在第一种情况下,您创建一个对象,然后使用inject方法注入字段。例如,在您onCreate的 Activity 中,您将调用它:

mObjectGraph.inject(this);

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

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

而已。也许 Dagger 2 会在这件事上有所改变:squ.re/dagger2

于 2014-07-13T14:27:40.240 回答