Я не могу понять, как внедрить объект Retrofit в мой класс Interactor - PullRequest
0 голосов
/ 29 января 2019

Я пытался прочитать кучу статей, но все еще не могу понять идею кинжала.

У меня есть класс Indicator, в который я хочу внедрить модифицированный экземпляр.

public class GetForecastInteractorImpl implements MainContract.GetForecastInteractor {

@Inject
Retrofit retrofit;
...
}

Без проблем я смог добавить его в MainActivity, но это не то, что я хочу.

Есть идеи?Я не знаю, какие части кода были бы полезны, поэтому, пожалуйста, скажите мне, что я предоставил бы их.

Ответы [ 2 ]

0 голосов
/ 30 января 2019

для инъекций вы должны выполнить следующую процедуру, давайте рассмотрим пример предоставления Retrofit (взяв Kotlin в качестве ссылки) 1. Создайте NetModule (аннотированный @Module)

для создания Retrofit вам может потребоваться предоставить OkHttpClient

@Provides
@Singleton(because we need only one instance through out the application)
fun provideOkHttpClient(): OkHttpClient {
return OkHttpClient().Builder().build() (you can also pass other things while building like Interceptor, timeOut check docs for that)
}

теперь предоставляет Retrofit с использованием того же формата, но для создания Retrofit вам нужно передать OkHttpClient в качестве аргумента, который мы предоставили выше.

@Provides
    @Singleton
    fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit {
    return Retrofit.Builder().client(okHttpClient).build()
    }

теперь вам нужно создать компонент приложения с аннотацией @Component, предоставиввыше NetModule ()

после компиляции Dagger сгенерирует тот класс компонента, который вы можете использовать для внедрения ваших классов

В вышеприведенном случае предположим, что есть класс MainApplication, где мы создали AppComponent, есть действие, называемое MainActivityкоторый нуждается в экземпляре Retrofit, затем MainActivityComponent добавит зависимости, заявив, что мне также нужен AppComponent, затем вы можете использовать это обновление.

дайте мне знать, что я смог ответить на ваш комментарий или нет:)

0 голосов
/ 29 января 2019

Ваш класс интерактора является инъекционным?

Можете ли вы добавить пустой конструктор в наш класс impl для инъекции:

@Inject
public GetForecastInteractorImpl () { }
...