div*_*yum 0 java dependency-injection dagger dagger-2
我正在使用 dagger 2 进行依赖注入,但陷入了字段注入的困境。以下是带有代码示例的完整场景:
假设我们有一个 A 类,它依赖于 B 库
class A {
    @Inject
    B b;
}
B 模块:
@Module
public class BModule {
    @Provides
    @Singleton
    public B provideB() {
        return new C.methodA();
        // C - static class; C.methodA returns B
    }
}
但是当我尝试在 A 类中使用时,我会得到空指针异常,但如果我使用构造函数注入b执行相同的操作,那么它会完美运行。我可以保证组件和其他依赖项都很好,因为构造函数部分可以正常工作。
A 是某个其他类(我们称之为 X)的依赖项,并且 A 正在使用构造函数注入进行初始化(已测试)。另外,X 被注入为void inject(X x);
我有两个问题:
PS:我刚刚分享了部分代码,因为存在多个依赖项,所以只是想解释一下场景。如果问题/场景仍然不清楚或需要更多信息,请告诉我。
谢谢。
字段注入dagger比构造函数注入稍微复杂一些。当你像这样使用构造函数注入时
class A {
    @Inject
    public A(B b) {}
}
并且您有 B 类提供商
@Module
class DaggerModule {
    @Provides
    B provideB() {}
}
现在 dagger 将知道如何创建实例A并为其传递所需的构造函数参数。所以一切都很好,编译成功并且运行完美。
但如果我们谈论场注入
class A {
    @Inject
    B b;
}
并且在某处提供了B,dagger 无法知道如何创建A实例以及何时注入b属性(在手动创建实例的情况下A)。为了使其工作,您需要在组件中编写特殊方法
@Component(DaggetModule.class)
interface DaggerComponent {
    void inject(A a);
}
以及代码中的某处
A a = new A();
DaggerComponent component = //TODO getDaggerComponent()
component.inject(a);
之后该b属性将被初始化并可供以后使用。希望现在已经清楚如何进行现场注入工作了。
| 归档时间: | 
 | 
| 查看次数: | 1501 次 | 
| 最近记录: |