Dagger2是否初始化它不使用的对象?

时间:2017-11-21 19:49:35

标签: dagger-2

我有一个@Module类,它有很多@Provides方法。我的@Component依赖于这个Module类。例如:

@Singleton
@Component(modules = { MyModule.class})
public interface MyComponent {

    ObjectA getObjectA();

    ObjectB getObjectB();

}

@Module
public class MyModule {

    @Provides
    @Singleton
    ObjectC provideObjectC() {
        return new ObjectC();   
    }

    @Provides
    @Singleton
    ObjectD provideObjectD() {
        return new ObjectD();   
    }

    @Provides
    @Singleton
    ObjectA provideObjectA(ObjectC objectC) {
        return new ObjectA(objectC);    
    }

    @Provides
    @Singleton
    ObjectB provideObjectB(ObjectD objectD) {
        return new ObjectB(objectD);    
    }
}

我使用Dagger构建器创建组件的实例,并提供MyModule的新实例。如果我只调用myComponent.getObjectA(),它还会构造ObjectB(及其依赖项),还是那些未构造的?

2 个答案:

答案 0 :(得分:2)

使用日志记录对我在问题中提供的代码进行手动测试。如果您的注射仅使用ObjetA,它将创建ObjectA和ObjectC,但它不会创建ObjectB或ObjectD。

答案 1 :(得分:0)

自从我使用Dagger以来已经有一段时间了,但您应该在提供语句中将这些参数指定为正常工作。它将管理调用您的其他提供程序方法以获取单例实例。

@Provides
@Singleton
ObjectB provideObjectB(ObjectD objectD) {
    return new ObjectB(objectD);   
}

否则您也可以将其指定为注入构造函数。见Dagger 2 injecting parameters of constructor