1
4

1 回答 1

2

在绑定使用String实例的类之前,您应该在kodein.lazy初始化中将String “类”与自身的实例绑定

  override val kodein = Kodein.lazy {
  import(androidXModule(this@MyApplication))

  bind() from singleton {String()}     //   --->  Add THIS line

  bind() from singleton { MyLoginApi(instance(), instance()) }
  bind<LoginDataSource>() with singleton { LoginService(instance()) }
  bind<LoginRepository>() with singleton { LoginRepositoryImpl(instance()) }

  }
    ...

您可以这样做,因为在这种情况下String类的构造函数是公共的,但不要将其作为最终解决方案,因为这对于其他数据类型(如Integer )是不可能的,因为它的构造函数是私有的。

真正的问题可能在于这种绑定

bind() from singleton { MyLoginApi(instance(), instance()) }

MyLoginApi中的实例是字符串的实例,由于您没有 MyLoginApi 接口的实现 Kodein直接尝试查找这些实例的定义位置。所以最好创建 MyLoginApiImpl 然后替换:

 bind() from singleton { MyLoginApi(instance(), instance()) }

bind<MyLoginApi>() with singleton { MyLoginApiImpl(instance())}
于 2020-04-30T10:17:20.403 回答