在应用程序中初始化翻新客户端

时间:2018-08-31 15:38:33

标签: android singleton retrofit

喜欢下面吗?

val retro: Retro by lazy {
    PilotApp.retro!!
}

class PilotApp : Application() {

   companion object {
      var retro: Retro? = null
   }

   override fun onCreate() {
      retro = Retro(applicationContext)
      super.onCreate()
   }
}

这是初始化的好方法吗?预先感谢。

1 个答案:

答案 0 :(得分:0)

这不遵循“控制反转”的规则,也不是一个好主意。

这不是一个好主意的原因是因为每当一个类(例如ViewModel,Fragment或Activity或...)想要使用retro时,他们都必须通过调用您自己的Retro对象来获取第一行(PilotApp.retro)。

另一种选择(称为依赖注入/依赖倒置)是将Retro对象在初始化时提供给类(同样是ViewModel或其他)。

之所以如此重要,是因为通过第二种方法,您可以使使用Retro的类可测试。您可以给他们RetroMock或TestRetro来实现您想要的功能(例如,模拟api以返回错误)。

该示例的另一个说明,您不需要使Retro可以为空,您应该将var设为lateinit并使其不为空。