Вам необходимо использовать qualifiers. Из раздела классификаторов dagger user's guide:
Иногда одного типа недостаточно для идентификации зависимости. В в этом случае мы добавляем аннотацию классификатора.
В вашем случае, просто C
не достаточно, чтобы определить два различных зависимостей, которые вы хотите инжектированных в A
и B
. Таким образом, вы бы добавили квалификатор, чтобы отличить два экземпляра. Вот пример:
public class A {
private final C c;
@Inject
public A(@Named("Instance 1") C c) {
this.c = c;
}
}
public class B {
private final C c;
@Inject
public B(@Named("Instance 2") C c) {
this.c = c;
}
}
Модуль:
@Module
public class CModule() {
@Provides
@Named("Instance 1")
C provideInstance1OfC() {
return new C();
}
@Provides
@Named("Instance 2")
C provideInstance2OfC() {
return new C();
}
}
Компонент:
@Component(modules = { CModule.class })
public interface ActivityComponent {
void inject(MyActivitiy activity);
}
Тогда, наконец:
public class MyActivity extends Activity {
@Inject A a;
@Inject B b;
@Override
void onCreate() {
super.onCreate();
DaggerActivityComponent.builder()
.cModule(new CModule())
.build()
.inject(this);
}
}
http://stackoverflow.com/a/40447384/7045114 –
Возможный дубликат [Как обеспечить объекты тот же тип? Dagger2] (http://stackoverflow.com/questions/40447262/how-to-provide-objects-of-the-same-type-dagger2) –