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

Рассмотрим следующий инжектор:

class Injector constructor(secretSauce: SecretSauce) {
    val kodein = Kodein {
        bind<SpicyBeans>() with factory { beans: List<Bean>, herbs: List<Herb> ->
            SpicyBeans(secretSauce, beans, herbs)
        }
    }
}

И следующая бизнес-логика:

class TastyMeal {
  private lateinit var injector : Kodein
  private lateinit var spicyBeans : SpicyBeans

  fun initialiseWithInjector(kodein : Kodein) {
    injector = kodein
    val herbs = listOf(Coriander(), Cumin())
    val beans = listOf(Pinto(), BlackEyed())
    // fetch SpicyBeans via given Kodein Factory, given herbs and beans here
  }
}

Как я могу использовать функцию прямой инъекции Kodein для извлечения экземпляра SpicyBeans с использованием фабрики, передавая List<Herb> и List<Bean> после создания экземпляра TastyMeal? Я не могу найти пример в документации.

Ответы [ 2 ]

3 голосов
/ 07 мая 2019

Решение называется фабриками с несколькими аргументами.Документация по этому вопросу очень скудна (это проблема, можете ли вы открыть заявку, чтобы мне напомнить, как улучшить документ?).

А пока вот ваше решение:

val tastyDish: SpicyBeans by kodein.instance(arg = M(beans, herbs))
1 голос
/ 07 мая 2019

Попробуйте что-то вроде этого:

class Injector constructor(secretSauce: SecretSauce) {
    val kodein = Kodein {
        bind<SecretSauce> with instance(secretSauce)
        bind<SpicyBeans>() with factory { beans: List<Bean>, herbs: List<Herb> 
->
        SpicyBeans(instance(), beans, herbs)
       }
    }
}

тогда:

val spicyBeans by kodein.newInstance { SpicyBeans(instance(), beans, herbs) }
...