匕首如何注入多个构造函数

时间:2017-01-09 00:14:09

标签: android dependency-injection mvp dagger

例如:

class A{
  B b;
  C c;
  @Inject
  A(B b){
    this.b = b;
  }
  @Inject
  A(C c){
    this.c = c;
  }
}

在其中一个模块中:

@Module
public class BModule {

private final B b;
public BModule(B b){
    this.b = b;
}

@Provides
BInterface provideB(){
    return b;
}
}

但是我得到错误,我不能在一个类中注入两个构造函数,我该怎么做才能解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:2)

类只构造一次;两个构造函数永远不会在同一个实例上被调用,因此有两个构造函数注释@Inject意味着Dagger必须选择一个。 您尝试使用这两个带注释的构造函数完成哪些行为?

理想情况下,组合构造函数。

@Inject
A(B b, C c){
  this.b = b;
  this.c = c;
}

如果绝对必要,可以将一个切换到method injection

@Inject
A(B b){
  this.b = b;
}
@Inject
void initialize(C c){ // Dagger calls this automatically
  this.c = c;
}