Коин конструктор вводит несколько параметров MVVM Android Архитектура - PullRequest
0 голосов
/ 28 января 2020

Я использую архитектуру MVVM для своего приложения Android и только что начал с Koin. Когда я пытаюсь ввести более одного параметра, начинают появляться проблемы. На данный момент у меня есть класс Repository, который использует:

  • RESTApi для выполнения веб-вызовов. RestProvider использует SocketProvider в качестве параметра конструктора для этого
  • Utils(Context) в качестве помощника для получения некоторой базовой c информации (appVersion, IMEI et c)

My appModule

    {
    single<RepositoryApi> {
        Repository(
            Utils(androidContext())
           \\ RestProvider(SocketProvider()) Here I get problems
        )
    }
    single<RestApi> { RestProvider(get() as SocketProvider) }
    single<SocketApi> { SocketProvider() }
    single<UtilsApi> { Utils(androidContext()) }
    viewModel { LoginViewModel(get()) }
}

Когда я использую Utils, только все работает нормально, когда я добавляю RestProvider, я получаю исключение:

Причина: org.koin.core.error .InstanceCreationException: Не удалось создать экземпляр для [type: Single, primary_type: 'com.etrans.ntsdriver.provider.repository.RepositoryApi'] в org.koin.core.instance.DefinitionInstance.create (DefinitionInstance.kt: 61) в org .koin.core.instance.SingleDefinitionInstance.get (SingleDefinitionInstance.kt: 40) в org.koin.core.definition.BeanDefinition.resolveInstance (BeanDefinition.kt: 70) в org.koin.core.scope.Scope.resolvest .kt: 165) at org.koin.core.scope.S c

Я понимаю, что мне чего-то не хватает, но я не нашел учебников или примеров, объясняющих такие случаи.

Мои зависимости от gradle, связанные с Koin (возможно, будут полезно):

 // Koin for Android - ViewModel features
    implementation "org.koin:koin-android-viewmodel:$koin_version"
    implementation "org.koin:koin-java:$koin_version"

    testImplementation "org.koin:koin-test:$koin_version"
    androidTestImplementation "org.koin:koin-test:$koin_version"

Заранее благодарен за любую помощь

1 Ответ

2 голосов
/ 28 января 2020

Вот пример использования Koin для настройки модернизации.

private val networkModule = module {

    single {
        HttpLoggingInterceptor(
            HttpLoggingInterceptor.Logger { message ->
                //Logger.d("NETWORK: $message")
            }).apply {
            level = HttpLoggingInterceptor.Level.NONE
        }
    }

    single {
        DefaultHeadersInterceptor()
    }

    single {
        OkHttpClient.Builder()
            .addInterceptor(get<HttpLoggingInterceptor>())
            .addInterceptor(get<DefaultHeadersInterceptor>())
            .build()
    }

    single {

        Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(JacksonConverterFactory.create(ObjectMapper().registerKotlinModule()))
            .client(get())
            .build()
    }
    single { get<Retrofit>().create(ApiInterface::class.java) }
}

Таким образом, вы можете настроить ApiInterface

single {get (get (get) ) .create (ApiInterface :: class. java)}

Надеюсь, это поможет.

...