我从Square看到了匕首图书馆,我正在进行一些测试。我是DI原则的新手,所以要善良:)
所以,我理解Dagger可以注入字段和构造函数。我也知道在我的活动中,我必须.inject(this);
以便注射可以在运行时完成。
但是,在活动初始化之后需要创建的对象O呢?
如果O具有可注入字段,则在使用之前我必须.inject(O);
,否则在访问其注入变量时会得到NullPointerException
。但是如果我编写一个可注入的构造函数,没问题,没有运行时异常。
当然我根据文档写了我的@Module。
Dagger注入没有其他代码编写字段的目的不是吗?我是否必须手动.inject();
我的所有物品?肯定有一件事我不知道。
提前致谢。
答案 0 :(得分:1)
正如你所写,Dagger支持两种注射:
在第一种情况下,您创建一个对象,然后使用inject
方法注入字段。例如,在您的onCreate
活动中,您会将其称为:
mObjectGraph.inject(this);
第二种类型的注入(构造函数注入)要求对象由Dagger创建。您只需使用@Inject
注释标记构造函数,然后就可以创建如下实例:
HasInjectableConstructor instance = mObjectGraph.get(HasInjectableConstructor.class);
就是这样。也许Dagger 2会改变这件事:squ.re/dagger2