无法为 Koin 改造创建 DI,android?
Unable to create DI for retrofit with Koin, android?
我正在尝试使用 DI 来使用 KOIN 创建改造实例
这是模块
val networkModule = module {
factory { provideRetrofit(get()) }
single { provideNetworkApi(get()) }
}
fun provideRetrofit(): Retrofit {
return Retrofit.Builder()
.baseUrl(NetworkConstant.BASE_URL)
.addConverterFactory(MoshiConverterFactory.create())
.client(OkHttpClient.Builder().build())
.build()
}
fun provideNetworkApi(retrofit: Retrofit): NetworkCall =
retrofit.create(NetworkCall::class.java)
申请中class
class BaseApp :Application() {
override fun onCreate() {
super.onCreate()
startKoin {
androidLogger()
androidContext(this@BaseApp)
modules(listOf(prefModule,networkModule))
}
}
}
编译器在 provideRetrofit(get()
上显示错误
Too many arguments for public fun provideRetrofit():
我能够为另一个创建 DI class
val prefModule = module {
single { AppPreference(androidContext()) }
}
有人能指出我这里有什么问题吗?
是否可以跳过 Retrofit
实例的分离(有什么好处?)并简单地将其合并到创建 NetworkCall
的目标中?
这是我的意思的一个例子:
val appModule = module {
single {
val httpInterceptor = HttpLoggingInterceptor()
httpInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY)
Retrofit.Builder()
.client(
OkHttpClient.Builder()
.addInterceptor(httpInterceptor).build()
)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("https://postman-echo.com/")
.build()
.create(PostmanEcho::class.java)
}
single {
PostmanEchoRepository(get(), get())
}
....
我的 PostmanEchoRepository
使用相当于你的 NetworkCall
作为第一个参数。
是因为 get()
val networkModule = module {
factory { provideRetrofit() }
single { provideNetworkApi(get()) }
}
我正在尝试使用 DI 来使用 KOIN 创建改造实例 这是模块
val networkModule = module {
factory { provideRetrofit(get()) }
single { provideNetworkApi(get()) }
}
fun provideRetrofit(): Retrofit {
return Retrofit.Builder()
.baseUrl(NetworkConstant.BASE_URL)
.addConverterFactory(MoshiConverterFactory.create())
.client(OkHttpClient.Builder().build())
.build()
}
fun provideNetworkApi(retrofit: Retrofit): NetworkCall =
retrofit.create(NetworkCall::class.java)
申请中class
class BaseApp :Application() {
override fun onCreate() {
super.onCreate()
startKoin {
androidLogger()
androidContext(this@BaseApp)
modules(listOf(prefModule,networkModule))
}
}
}
编译器在 provideRetrofit(get()
Too many arguments for public fun provideRetrofit():
我能够为另一个创建 DI class
val prefModule = module {
single { AppPreference(androidContext()) }
}
有人能指出我这里有什么问题吗?
是否可以跳过 Retrofit
实例的分离(有什么好处?)并简单地将其合并到创建 NetworkCall
的目标中?
这是我的意思的一个例子:
val appModule = module {
single {
val httpInterceptor = HttpLoggingInterceptor()
httpInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY)
Retrofit.Builder()
.client(
OkHttpClient.Builder()
.addInterceptor(httpInterceptor).build()
)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("https://postman-echo.com/")
.build()
.create(PostmanEcho::class.java)
}
single {
PostmanEchoRepository(get(), get())
}
....
我的 PostmanEchoRepository
使用相当于你的 NetworkCall
作为第一个参数。
是因为 get()
val networkModule = module {
factory { provideRetrofit() }
single { provideNetworkApi(get()) }
}