我正在为我的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( }
希望这会有所帮助。