Как восстановить объект с фабричной привязкой с двумя аргументами в кодеине? - PullRequest
0 голосов
/ 04 июня 2019

Я вызвал 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 -> DetailViewModelFactory(id, entity, instance()) }, о последнем сообщалось ранее.

Однако, когда я пытаюсь получить объект, я не могу правильно написать код:

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

Как получитьобъект правильно с серией аргументов?

Я не нашел в документации, как это сделать, потому что информации недостаточно. Прямое получение , несколько аргументов , Небольшая документация по фабрикам с несколькими аргументами , Как я могу использовать прямой поиск Кодейна для получения зависимости, привязанной как фабрика?

1 Ответ

0 голосов
/ 16 июля 2019

Если вы хотите получить Facotry, а не экземпляр, используйте by factory2().

Если вы хотите получить экземпляр, используйте by instance(arg = M(42L, "whatever")).

...