Как установить реализацию пользовательского сервиса в Retrofit2?

#java #kotlin #retrofit2

#java #kotlin #retrofit2

Вопрос:

Предположим, у меня есть какой-то api:

 interface SomeApi {

    @GET("api/some")
    suspend fun getSome(): List<SomeDto>
}
  

И его пользовательская реализация:

 class SomeApiImpl : SomeApi {
    override suspend fun getSome(): List<SomeDto> {
        // do stuff
    }
}
  

Можно ли настроить retrofit таким образом, чтобы вместо создания прокси-реализации SomeApi он использовал SomeApiImpl?
Спасибо!

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

1. Насколько мне известно, это означало бы написание CallAdapter , но я не могу быть уверен, что это действительно то, что вы хотите. Могу я спросить, почему вы хотите это сделать? может быть, есть другой способ достичь вашей цели. Если это из-за сопрограмм, retrofit уже поддерживает их, используя это , например

2. Ну, иногда я хочу выполнить http-вызов, а иногда нет. Случай, который у меня есть: есть какой-то сервис, и я хочу предоставить его api через модернизацию (интерфейсы, подобные SomeApi в вопросе выше). В этом случае клиенты должны будут выполнить http-вызов для получения данных. Также я хотел бы использовать этот API в самом сервисе. В этом случае я бы хотел избежать сетевых вызовов.

3. Мне кажется, что у вас есть аргументы в пользу шаблона репозитория ? У вас может быть репозиторий, который получает реализацию сервиса, который не выполняет http-вызовы, и созданный модифицированный экземпляр api, который будет выполнять вызовы. Просто предложение.

4. Пожалуйста, удалите приветствия. Следует ли удалять из сообщений «Привет», «спасибо», слоганы и приветствия?