Koin 构造函数注入少量参数 MVVM Android Architecture



我正在为我的Android应用程序使用MVVM架构,并且刚刚开始使用Koin。当我尝试注入多个参数时,问题开始出现。 现在我有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时,我得到异常:

由以下原因引起:org.koin.core.error.InstanceCreationException:无法 创建实例 [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( 在 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"

提前感谢您的任何帮助

下面是使用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) }
}

所以通过这种方式你可以配置Api接口

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

希望这会有所帮助。

最新更新