Использование @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() {
}