我有一个@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(及其依赖项),还是那些未构造的?
答案 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