У меня есть следующий код в модуле Kodein
bind<Manager>() with factory { strategy: OrderStrategyType ->
val manager: Manager = when (strategy) {
OrderStrategyType.VOLATILITY -> VolatilityManager()
else -> SimpleManager()
}
return@factory manager
}
, где Manager
- это интерфейс, а VolatilityManager()
и SimpleManager()
реализуют его.
IntelliJ предлагает встроенную переменную manager
, если я применяю предложение, я получаю код:
bind<Manager>() with factory { strategy: OrderStrategyType ->
return@factory when (strategy) {
OrderStrategyType.VOLATILITY -> VolatilityManager()
else -> SimpleManager()
}
}
Однако, хотя IDE не обнаруживает проблем с этим кодом, он не компилируется с
Type inference failed: infix fun <C, A> with(binding: KodeinBinding<in C, in A, out Manager>): Unit
cannot be applied to
(Factory<Any?, OrderStrategyType, Any>)
Честно говоря, я не понимаю ошибку компилятора. Вывод кажется мне очевидным. Стоит ли переписывать свой код, если да, то как?