gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:42:50 25 4
gpt4 key购买 nike

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

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

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

难道 Dagger 的目的不是为了注入(inject)字段而无需编写其他代码吗?我是否必须手动 .inject(); 我所有的对象?我肯定缺少一件事。

提前致谢。

最佳答案

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

  • 现场注入(inject)
  • 构造函数注入(inject)

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

mObjectGraph.inject(this);

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

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

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

关于Android - 运行时使用 Dagger 创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23447899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com