2

在学习 kodein 时,我经常看到 bind() withbind() from

谁能告诉我有什么区别以及我们为什么要使用它。

前任:

    bind<Dice>() with provider { RandomDice(0, 5) }
    bind<DataSource>() with singleton { SqliteDS.open("path/to/file") }
    bind() from singleton { RandomDice(6) }
    bind("DnD20") from provider { RandomDice(20) }
    bind() from instance(SqliteDataSource.open("path/to/file"))
4

2 回答 2

0

with isTypeBinder是类型绑定(通过generic)与给定的标签和类型(是必需的)。

from 是DirectBinder与给定标签的直接绑定(不是必需的类型)。它将被定义类型取决于工厂的类型。

每个 binder 之间的区别只是类型推断的方式。因此,您可以在声明模块时使用更高效的绑定器。

于 2020-02-11T07:58:40.747 回答
0

bind<Type>() withType 明确定义。例如,当您将接口类型绑定到它的实现时,这一点很重要:

bind<Type>() with singleton { TypeImpl() }

现在考虑您正在绑定一个非常简单的类型,例如配置数据对象:

bind<Config>() with singleton { Config("my", "config", "values") }

您已经编写Config了两次:一次在绑定定义中,一次在绑定本身中。

Enter bind() from:它没有定义类型,而是将绑定类型的选择留给绑定本身。绑定类型是隐式定义的。例如,您可以这样编写Config绑定:

bind() from singleton { Config("my", "config", "values") }

请注意,将类型绑定到自身(这是bind() from为了什么)通常是一个坏主意(它违反了 IoC 模式)并且应该只用于非常简单的类型,例如数据类。

于 2020-02-16T13:54:24.750 回答