【发布时间】:2018-11-11 12:05:02
【问题描述】:
帮助解决问题!(((我有3个DI模块。natworkModule中有一个改造对象,viewModelModule中有所有viewModel,respositoryModule中有对服务器的所有请求。我按照文档做了一切,但我在谷歌中找不到这个错误。提前谢谢你!!!对不起我的英语!)
class App : Application(){
override fun onCreate() {
super.onCreate()
startKoin(this, listOf(natworkModule, viewModelModule,repositoryModule))
}
}
var natworkModule = module {
single { createOkHttpClient() }
single { createApiService<ApiService>(get () ,getProperty(SERVER_URL))
}
}
const val SERVER_URL = "https://api.github.com/"
fun createOkHttpClient() : OkHttpClient{
val httpLoggingInterceptor = HttpLoggingInterceptor()
httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BASIC
return OkHttpClient.Builder()
.connectTimeout(60L, TimeUnit.SECONDS)
.readTimeout(60L, TimeUnit.SECONDS)
.addInterceptor(httpLoggingInterceptor).build()
}
inline fun <reified T> createApiService(okHttpClient: OkHttpClient, url: String): T {
val retrofit = Retrofit.Builder()
.baseUrl(url)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(LiveDataCallAdapterFactory()).build()
return retrofit.create(T::class.java)
}
var repositoryModule = module {
factory<TestRepository> {
TestRepositoryImpl(get())
}
}
var viewModelModule = module {
viewModel {
TestViewModel(get())
}
}
【问题讨论】:
-
你在哪里声明了 startKoin() 方法???如果您没有在任何地方创建该方法,则该错误是必要的!方法不能被神奇地访问!如果我遗漏了什么,请告诉我。
-
@W.Seun 是 Koin 提供的扩展功能。欧普,你能指定你得到的错误信息吗?
TestViewModel的构造函数签名是什么? -
哦,我看到这是 kotlin 用户的依赖注入,在检查了他们的文档之后,我想知道你是否应该能够解析 startKoin(this, listOf(/*yourModule* /)) 我建议你先解析一个模块,因为我什至不确定你是否可以解析多个模块,所以它应该看起来像这样 startKoin(this, listOf(natworkModule)) 如果这有效并且你认为你仍然可以解析更多我不知道的模块,那么您可能需要注意导致错误的模块,它不是 startKoin()。