【问题标题】:required: KodeinBinding<in ???, in ???, out TaskRepository>必需:KodeinBinding<in ???, in ???, out TaskRepository>
【发布时间】:2019-09-24 12:05:47
【问题描述】:

在探索 Kodein 时,我遵循 https://proandroiddev.com/dependency-injection-with-kotlin-kodein-koin-3d783745e48d 中的示例

val diModel = Kodein.Module {
    bind<TasksRepository>() with singleton {
        FakeTasksRepository()
    }
}

我收到了错误

Type inference failed. Expected type mismatched:
required: KodeinBinding<in ???, in ???, out TaskRepository>
found:    (Mutable)set<(() -> FakeTaskRepository)!>!

怎么了?

仅供参考,我使用的是kodeIn版本6.4.0

补充一下,我试过https://kodein.org/di/的例子

val businessModule = Kodein.Module {
    bind<IService>() with singleton { BusinessService() }
}

同样的事情也会发生。我做错什么了吗?还是文档过时了?

【问题讨论】:

    标签: kotlin kodein


    【解决方案1】:

    这里是一个完整的工作示例:

    import org.kodein.di.Kodein
    import org.kodein.di.generic.bind
    import org.kodein.di.generic.instance
    import org.kodein.di.generic.singleton
    
    interface TasksRepository {
        fun log(): String = "EMPTY"
    }
    class FakeTasksRepository : TasksRepository {
        override fun log(): String = "Hello Kodeiners!"
    }
    
    val diModel = Kodein.Module("diModel") {
        bind<TasksRepository>() with singleton {
            FakeTasksRepository()
        }
    }
    
    fun main() {
        val kodein = Kodein {
            import(diModel)
        }
    
        val tasksRepository: TasksRepository by kodein.instance()
        println(tasksRepository.log())
    }
    

    【讨论】:

    • 您对导入的回答会有所帮助。我赞成你的回答。
    • 希望我的问题能帮助其他导入错误...并发现相同错误消息的人。
    【解决方案2】:

    发现问题。我不小心包含了

    import java.util.Collections.singleton

    而不是

    import org.kodein.di.generic.singleton

    【讨论】:

    • 不明白你的例子有什么问题,没有看到你的回复。
    猜你喜欢
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 2015-12-14
    • 2020-12-20
    • 2011-10-12
    • 1970-01-01
    相关资源
    最近更新 更多