Невозможно создать DI для модернизации с помощью Koin, android?

Я пытаюсь использовать DI для создания экземпляра дооснащения с помощью KOIN, это модуль

val networkModule = module {
factory { provideRetrofit(get()) }
single { provideNetworkApi(get()) }
}

fun provideRetrofit(): Retrofit {
return Retrofit.Builder()
    .baseUrl(NetworkConstant.BASE_URL)
    .addConverterFactory(MoshiConverterFactory.create())
    .client(OkHttpClient.Builder().build())
    .build()

}

fun provideNetworkApi(retrofit: Retrofit): NetworkCall =
retrofit.create(NetworkCall::class.java)

В классе приложения

class BaseApp :Application() {

override fun onCreate() {
    super.onCreate()
    startKoin {
        androidLogger()
        androidContext(this@BaseApp)
        modules(listOf(prefModule,networkModule))
    }
}
}

Компилятор показывает ошибку provideRetrofit(get()

Too many arguments for public fun provideRetrofit():

Мне удалось создать DI для другого класса

val prefModule = module {
single { AppPreference(androidContext()) }
}

Может кто-нибудь указать мне, что здесь не так?


person WISHY    schedule 01.06.2020    source источник
comment
factory {provideRetrofit (get ())}, почему get () передается в вызов функции?   -  person Ashok Kumar    schedule 01.06.2020


Ответы (2)


Вызвано из-за get()

val networkModule = module {
factory { provideRetrofit() }

single { provideNetworkApi(get()) }
}
person WISHY    schedule 02.06.2020

Было бы приемлемо пропустить разделение экземпляра Retrofit (какая польза?) И просто объединить его для создания своего NetworkCall?

Вот пример того, что я имею в виду:

val appModule = module {
    single {
        val httpInterceptor = HttpLoggingInterceptor()
        httpInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY)

        Retrofit.Builder()
            .client(
                OkHttpClient.Builder()
                    .addInterceptor(httpInterceptor).build()
            )
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())
            .baseUrl("https://postman-echo.com/")
            .build()
            .create(PostmanEcho::class.java)
    }

    single {
        PostmanEchoRepository(get(), get())
    }
....

Мой PostmanEchoRepository использует эквивалент вашего NetworkCall в качестве первого параметра.

Подробности: https://github.com/oradkovsky/weird-data-input/blob/master/app/src/main/java/com/ror/weirddatainput/di/AppModule.kt

person ror    schedule 01.06.2020