Di.kt 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package com.ys.bdtp.adm.di
  2. import android.content.Context
  3. import android.util.Log
  4. import com.ys.bdtp.adm.AdmApplication
  5. import com.ys.bdtp.adm.app.IP
  6. import com.ys.bdtp.adm.app.converter.NullOrEmptyConverter
  7. import com.ys.bdtp.adm.app.interceptor.GzipRequestInterceptor
  8. import com.ys.bdtp.adm.mvvm.model.db.AdmDatabase
  9. import com.ys.bdtp.adm.mvvm.model.nt.Api
  10. import com.ys.bdtp.adm.mvvm.vm.flash.FlashRepository
  11. import com.ys.bdtp.adm.mvvm.vm.flash.FlashViewModel
  12. import com.ys.bdtp.adm.mvvm.vm.login.LoginRepository
  13. import com.ys.bdtp.adm.mvvm.vm.login.LoginViewModel
  14. import com.ys.bdtp.adm.mvvm.vm.main.MainRepository
  15. import com.ys.bdtp.adm.mvvm.vm.main.MainViewModel
  16. import okhttp3.OkHttpClient
  17. import okhttp3.logging.HttpLoggingInterceptor
  18. import org.kodein.di.DI
  19. import org.kodein.di.android.x.androidXModule
  20. import org.kodein.di.bind
  21. import org.kodein.di.bindSingleton
  22. import org.kodein.di.instance
  23. import org.kodein.di.provider
  24. import org.kodein.di.singleton
  25. import retrofit2.Retrofit
  26. import retrofit2.converter.gson.GsonConverterFactory
  27. import java.io.UnsupportedEncodingException
  28. import java.util.concurrent.TimeUnit
  29. fun di(context: Context) = DI {
  30. import(androidXModule(context.applicationContext as AdmApplication))
  31. import(httpModule)
  32. import(repositoryModule)
  33. import(viewModelModule)
  34. import(dbModule)
  35. }
  36. private val httpModule = DI.Module("httpModule") {
  37. // 构建 Retrofit 对象
  38. bind {
  39. singleton {
  40. Retrofit.Builder()
  41. .baseUrl(IP)
  42. .client(instance())
  43. .addConverterFactory(NullOrEmptyConverter())
  44. .addConverterFactory(GsonConverterFactory.create())
  45. .build()
  46. }
  47. }
  48. // 构建 OkHttpClient 对象
  49. bind {
  50. singleton {
  51. OkHttpClient.Builder()
  52. .connectTimeout(100, TimeUnit.SECONDS)
  53. .readTimeout(3000, TimeUnit.SECONDS)
  54. .writeTimeout(3000, TimeUnit.SECONDS)
  55. .addInterceptor(instance<HttpLoggingInterceptor>())
  56. .addInterceptor(instance<GzipRequestInterceptor>())
  57. .build()
  58. }
  59. }
  60. // 构建 HttpLoggingInterceptor 对象
  61. bind {
  62. singleton {
  63. HttpLoggingInterceptor { message ->
  64. try {
  65. Log.d("OKHttp-----", message)
  66. } catch (e: UnsupportedEncodingException) {
  67. e.printStackTrace()
  68. Log.d("OKHttp-----", message)
  69. }
  70. }.setLevel(HttpLoggingInterceptor.Level.BODY)
  71. }
  72. }
  73. bind {
  74. singleton {
  75. GzipRequestInterceptor()
  76. }
  77. }
  78. // Api 对象
  79. bind {
  80. singleton { instance<Retrofit>().create(Api::class.java) }
  81. }
  82. }
  83. val repositoryModule = DI.Module("repository") {
  84. bind { provider { FlashRepository(instance()) } }
  85. bind { provider { LoginRepository(instance()) } }
  86. bind { provider { MainRepository(instance()) } }
  87. }
  88. val viewModelModule = DI.Module("viewModel") {
  89. bind { provider { FlashViewModel(instance()) } }
  90. bind { provider { LoginViewModel(instance()) } }
  91. bind { provider { MainViewModel(instance()) } }
  92. }
  93. val dbModule = DI.Module("dbModule") {
  94. bind {
  95. singleton {
  96. AdmDatabase(instance())
  97. }
  98. }
  99. }