gpt4 book ai didi

android - Koin 构造函数注入(inject)少量参数 MVVM Android 架构

转载 作者:行者123 更新时间:2023-12-03 10:56:11 26 4
gpt4 key购买 nike

我正在为我的 Android 应用程序使用 MVVM 架构,并且刚开始使用 Koin。当我尝试注入(inject)多个参数时,问题开始出现。
现在我有 Repository使用的类:

  • RESTApi执行网络调用。 RestProvider使用 SocketProvider作为此
  • 的构造函数参数
  • Utils(Context)作为检索一些基本信息的助手(appVersion,
    IMEI 等)

  • 我的应用模块
        {
    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我得到异常(exception):

    Caused by: org.koin.core.error.InstanceCreationException: Could not create instance for [type:Single,primary_type:'com.etrans.ntsdriver.provider.repository.RepositoryApi'] at org.koin.core.instance.DefinitionInstance.create(DefinitionInstance.kt:61) at org.koin.core.instance.SingleDefinitionInstance.get(SingleDefinitionInstance.kt:40) at org.koin.core.definition.BeanDefinition.resolveInstance(BeanDefinition.kt:70) at org.koin.core.scope.Scope.resolveInstance(Scope.kt:165) at org.koin.core.scope.Sc



    我知道我遗漏了一些东西,但我没有找到任何教程或示例来解释这种情况。

    我与 Koin 相关的 gradle 依赖项(也许会有用):
     // 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"

    提前感谢您的帮助

    最佳答案

    这是使用 的示例科因 设置改造。

    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().create(ApiInterface::class.java) }



    希望这会有所帮助。

    关于android - Koin 构造函数注入(inject)少量参数 MVVM Android 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59956407/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com