【问题标题】:How can I use Kodein's direct retrieval to fetch a dependency bound as a factory?如何使用 Kodein 的直接检索来获取绑定为工厂的依赖项?
【发布时间】:2019-05-07 08:34:37
【问题描述】:

考虑以下注入器:

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&lt;Herb&gt;List&lt;Bean&gt; TastyMeal 实例化之后?我在文档中找不到示例。

【问题讨论】:

    标签: kotlin dependency-injection kodein


    【解决方案1】:

    解决方案称为多参数工厂。 关于这方面的文档非常稀缺(这是一个问题,您可以开一张票,以便提醒我改进文档吗?)。

    与此同时,这是您的解决方案:

    val tastyDish: SpicyBeans by kodein.instance(arg = M(beans, herbs))
    

    【讨论】:

      【解决方案2】:

      试试这样的:

      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) }
      

      【讨论】:

      • newInstance 帮助了我,谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 2014-09-06
      相关资源
      最近更新 更多