【问题标题】:How to recover object with a factory binding with two arguments in kodein?如何在kodein中使用带有两个参数的工厂绑定来恢复对象?
【发布时间】:2019-10-19 11:08:41
【问题描述】:

我调用了一个 ViewModel,它在其构造函数中获取三个参数:

class DetailViewModel(
    private val id: Long,
    private val tipo: String,
    private val msRepository: MSRepository) : ViewModel() {
val establishmentProfessional by lazyDeferred { 
      msRepository.getEstablishment(id, tipo)
   }
}

我创建了一个工厂来构建对象 com DI:

class DetailViewModelFactory(
    private val id: Long,
    private val tipo: String,
    private val msRepository: MSRepository
    ) : ViewModelProvider.NewInstanceFactory() {

@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
    return DetailViewModelFactory(id,  tipo, msRepository) as T
     }
}

我写的Factory绑定如下:bind() from factory { id: Long, entity: String -&gt; DetailViewModelFactory(id, entity, instance()) },后者之前有报道过。

但是,当我尝试检索对象时,我无法正确拼写代码:

private var viewModelFactory: ( (Long, String) -> DetailViewModelFactory) by factory()

如何使用一系列参数正确检索对象?

我在文档中没有找到怎么做,因为资料不够。Retrieval Direct, multiple argumentes, Little documentation on multi-argument factories, How can I use Kodein's direct retrieval to fetch a dependency bound as a factory?

【问题讨论】:

    标签: android kotlin dependency-injection kodein


    【解决方案1】:

    如果您想检索工厂而不是实例,请使用by factory2()

    如果要检索实例,请使用by instance(arg = M(42L, "whatever"))

    【讨论】:

    • 我使用了 instance(arg=M(id, type)),但在调试中提示“尚未初始化惰性值”。为变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 2011-03-22
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多