Страницы

Поиск по вопросам

понедельник, 17 июня 2019 г.

Как избавиться от ошибки is bound multiple times в Dagger2?

Я понял так. Если тебе нужно передать параметры в метод который будет инжектнут, то нужно сделать еще один метод который будет предоставлять для Dagger этот параметр.
Вот что есть
@Module class ModelModule {
@Provides @Singleton ApiInterface provideApiInterface() { return ApiModule.getApiInterface(); } }
Метод который отлично работает. Теперь если нам нужно добавить в этот метод параметр, то нам сразу же нужно и создать метод который будет этот параметр предоставлять
вот так
@Module class ModelModule {
@Provides @Singleton int provideInt() { return 1; }
@Provides @Singleton ApiInterface provideApiInterface(int i) { return ApiModule.getApiInterface(i); } }
Но все дело в том, что у меня уже есть другой модуль в котором инициализирован метод с возвращающим типом int
@Module class AnotherModule { @Provides Integer getInt(){ return 3; } }
И получается что при запуске я получаю вот такую ошибку
Error:(11, 10) error: java.lang.Integer is bound multiple times: @Provides @Singleton int com.krokosha.aleksey.daggertwo.ModelModule.provideInt() @Provides Integer com.krokosha.aleksey.daggertwo.AnotherModule.getInt()
Получается я не могу использовать 2 метода которые возвращают одинаковый тип... Но как тогда быть?
Мне нужен он и там и там...


Ответ

В итоге я воспользовался Qualifier и получилось вот так
@Module class ModelModule {
@Provides @Named("FirstInt") int provideInt() { return 1; } }
@Module class AnotherModule {
@Provides @Named("SecondInt") int provideInt() { return 1; } }
@Inject protected ApiInterface apiInterface;
@Inject @Named("FirstInt") //or whatever you need protected Integer valueInt;

Комментариев нет:

Отправить комментарий