Использование @Binds с @Named в Dagger 2

У меня есть мой модуль, как показано ниже,

@Module
public abstract class BindsModuleEx {

    @Binds
    @Named("obj2")
    public abstract SomeInterface provideSomeInterface2(SomeInterfaceImpl2 someInterfaceImpl);

    @Binds
    @Named("obj1")
    public abstract SomeInterface provideSomeInterface1(SomeInterfaceImpl1 someInterfaceImpl);
}

Мои реализации SomeInterface как показано ниже

public class SomeInterfaceImpl1 implements SomeInterface {
  @Inject
  @Named("obj1")
  public SomeInterfaceImpl1() {
  }

public class SomeInterfaceImpl2 implements SomeInterface {

  @Inject
  @Named("obj2")
  public SomeInterfaceImpl2() {
  }

Могу ли я использовать @Named или же @Qualifier на @Binds методы? Я в курсе использования @Provides с @Named но я хотел бы знать, почему это не работает и как правильно решить такую ​​ситуацию.

Сообщение об ошибке читается так

error: @Qualifier annotations are not allowed on @Inject constructors.

~ Заранее спасибо.

2 ответа

Решение

Квалификатор @Named не входит в декларацию конструктора - вам нужно использовать его в целевом объекте инъекции, например, если вы вводите "obj1" в Activity, где вы будете использовать квалификатор.

Вот как я это изменил, и это работает.

public class MainActivity extends BaseActivity {

    @Inject
    @Named("obj1")
    SomeInterface someInterface1;

    @Inject
    @Named("obj2")
    SomeInterface someInterface2;
}

Вот как мои реализации SomeInterface сейчас

public class SomeInterfaceImpl1 implements SomeInterface {
  @Inject
  public SomeInterfaceImpl1() {
  }
Другие вопросы по тегам