123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- package com.ys.bdtp.adm.di
- import android.content.Context
- import android.util.Log
- import com.ys.bdtp.adm.AdmApplication
- import com.ys.bdtp.adm.app.IP
- import com.ys.bdtp.adm.app.converter.NullOrEmptyConverter
- import com.ys.bdtp.adm.app.interceptor.GzipRequestInterceptor
- import com.ys.bdtp.adm.mvvm.model.db.AdmDatabase
- import com.ys.bdtp.adm.mvvm.model.nt.Api
- import com.ys.bdtp.adm.mvvm.vm.flash.FlashRepository
- import com.ys.bdtp.adm.mvvm.vm.flash.FlashViewModel
- import com.ys.bdtp.adm.mvvm.vm.login.LoginRepository
- import com.ys.bdtp.adm.mvvm.vm.login.LoginViewModel
- import com.ys.bdtp.adm.mvvm.vm.main.MainRepository
- import com.ys.bdtp.adm.mvvm.vm.main.MainViewModel
- import okhttp3.OkHttpClient
- import okhttp3.logging.HttpLoggingInterceptor
- import org.kodein.di.DI
- import org.kodein.di.android.x.androidXModule
- import org.kodein.di.bind
- import org.kodein.di.bindSingleton
- import org.kodein.di.instance
- import org.kodein.di.provider
- import org.kodein.di.singleton
- import retrofit2.Retrofit
- import retrofit2.converter.gson.GsonConverterFactory
- import java.io.UnsupportedEncodingException
- import java.util.concurrent.TimeUnit
- fun di(context: Context) = DI {
- import(androidXModule(context.applicationContext as AdmApplication))
- import(httpModule)
- import(repositoryModule)
- import(viewModelModule)
- import(dbModule)
- }
- private val httpModule = DI.Module("httpModule") {
- // 构建 Retrofit 对象
- bind {
- singleton {
- Retrofit.Builder()
- .baseUrl(IP)
- .client(instance())
- .addConverterFactory(NullOrEmptyConverter())
- .addConverterFactory(GsonConverterFactory.create())
- .build()
- }
- }
- // 构建 OkHttpClient 对象
- bind {
- singleton {
- OkHttpClient.Builder()
- .connectTimeout(100, TimeUnit.SECONDS)
- .readTimeout(3000, TimeUnit.SECONDS)
- .writeTimeout(3000, TimeUnit.SECONDS)
- .addInterceptor(instance<HttpLoggingInterceptor>())
- .addInterceptor(instance<GzipRequestInterceptor>())
- .build()
- }
- }
- // 构建 HttpLoggingInterceptor 对象
- bind {
- singleton {
- HttpLoggingInterceptor { message ->
- try {
- Log.d("OKHttp-----", message)
- } catch (e: UnsupportedEncodingException) {
- e.printStackTrace()
- Log.d("OKHttp-----", message)
- }
- }.setLevel(HttpLoggingInterceptor.Level.BODY)
- }
- }
- bind {
- singleton {
- GzipRequestInterceptor()
- }
- }
- // Api 对象
- bind {
- singleton { instance<Retrofit>().create(Api::class.java) }
- }
- }
- val repositoryModule = DI.Module("repository") {
- bind { provider { FlashRepository(instance()) } }
- bind { provider { LoginRepository(instance()) } }
- bind { provider { MainRepository(instance()) } }
- }
- val viewModelModule = DI.Module("viewModel") {
- bind { provider { FlashViewModel(instance()) } }
- bind { provider { LoginViewModel(instance()) } }
- bind { provider { MainViewModel(instance()) } }
- }
- val dbModule = DI.Module("dbModule") {
- bind {
- singleton {
- AdmDatabase(instance())
- }
- }
- }
|