Я понял так. Если тебе нужно передать параметры в метод который будет инжектнут, то нужно сделать еще один метод который будет предоставлять для 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;
Комментариев нет:
Отправить комментарий