Size: a a a

2019 April 05

u

user753 in Dagger 2
Алексей Ершов
я так понимаю, у вас SomeClass -> ApiService -> Retrofit
Да.
источник

АЕ

Алексей Ершов in Dagger 2
Если вы меняете инстанс retrofit, то вам нужно пересоздать всю цепочку.
источник

u

user753 in Dagger 2
В SomeClass в конструкторе App.getComponent.InjectDep(this);
источник

u

user753 in Dagger 2
который создаёт ApiService.
источник

u

user753 in Dagger 2
Я думал, что если просто сделать внутри модуля apiService = new ApiService(), то в SomeClass ссылка будет уже на новый объект.
источник

АЕ

Алексей Ершов in Dagger 2
Нет, у вас же inject уже прошел. В даггере нет магии, он просто проставляет вам в поля значения из графа зависимостей.
источник

АЕ

Алексей Ершов in Dagger 2
можно создать новый экземпляр компонента с новым retrofit, и заново сделать inject
источник

u

user753 in Dagger 2
Блин, чот да, затупил слегка...
источник

u

user753 in Dagger 2
Объект пересоздался, но в СамКласс ссылка то ведёт на старый.
источник

АЕ

Алексей Ершов in Dagger 2
именно так)
источник

u

user753 in Dagger 2
И в нём получается надо делать что-то типа oldLink = newLink
источник

u

user753 in Dagger 2
Эхъ, а так хотелось всё спихнуть на даггер. Теперь придётся колбэчить всякие колбэки, которые будут срабатывать после смены урла и заново запрашивать новый ApiService
источник

u

user753 in Dagger 2
Алексей Ершов
именно так)
Спасибо ))
источник

АЕ

Алексей Ершов in Dagger 2
можно сделать SomeClass -> ApiServiceHolder -> ApiService -> Retrofit, чтобы SomeClass не имел фиксированной ссылки на ApiService, а каждый раз запрашивал его из Holder-а, а в холдере уже пересоздавать, когда надо
источник

АЕ

Алексей Ершов in Dagger 2
Можно Provider<ApiService> испольховать в качестве холдера.
источник

u

user753 in Dagger 2
Хм. Чот я пока не догоняю сходу, как это реализовать, но попробую подумать над этим.
источник

АЕ

Алексей Ершов in Dagger 2
я в подобных кейсах просто убиваю всё, что зависит от ApiService, и создаю заново
источник

u

user753 in Dagger 2
Первый вариант ещё более-менее, но там получается Холдер будет без даггера создавать АПИ, а СамКласс будет каждый раз при вызове делать. Холдер.гетАпи.гетРЕквест...
источник

АЕ

Алексей Ершов in Dagger 2
для красоты можно не холдер сделать, а обёртку над ApiService, которая будет иметь такой же интерфейс, и будет делегировать вызовы внутреннему инстансу.
источник

u

user753 in Dagger 2
Как вариант, да.
В общем, надо подумать, но в любом случае - халявы не будет тут.
источник