依赖注入——Android——运行时用Dagger创建对象



我遇到了Square的dagger库,我目前正在做一些测试。我不熟悉DI原则,所以请友好:)

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

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

dagger的目的不就是注入字段而不需要编写其他代码吗?我必须手动.inject();所有对象吗?我肯定错过了一样东西。

正如你写的那样,Dagger支持两种注入:

  • 字段注入
  • 构造函数注入

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

mObjectGraph.inject(this);

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

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

就是这样。也许dagger2会改变这件事:sq。re/dagger2

最新更新