Android **bind() with** 和 **bind() from** 之间的区别
Android kodein difference between **bind() with** and **bind() from**
在研究 kodein 时,我经常看到 bind() with 和 bind() 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"))
与
with 是 TypeBinder
是类型绑定(通过 generic)与给定的标签和类型(是必需的)。
来自
from is DirectBinder
是与给定标签(非必需类型)的直接绑定。它将根据 工厂类型定义类型。
The difference between each binder is just the way to type inference.
thus, you can use a more efficient binder when declaring module.
bind<Type>() with
明确定义 Type
。例如,当您将接口类型绑定到它的实现时,这一点很重要:
bind<Type>() with singleton { TypeImpl() }
现在假设您正在绑定一个非常简单的类型,例如配置数据对象:
bind<Config>() with singleton { Config("my", "config", "values") }
您已编写 Config
两次:一次在绑定定义中,一次在绑定本身中。
输入bind() from
:它不定义类型,而是将绑定类型的选择留给绑定本身。绑定类型是 隐式定义的 。例如,您可以这样编写 Config
绑定:
bind() from singleton { Config("my", "config", "values") }
请注意,将类型绑定到自身(这就是 bind() from
的用途)通常不是一个好主意(它违反了 IoC 模式)并且应该只用于非常简单的类型,例如数据 类.
在研究 kodein 时,我经常看到 bind() with 和 bind() 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"))
与
with 是 TypeBinder
是类型绑定(通过 generic)与给定的标签和类型(是必需的)。
来自
from is DirectBinder
是与给定标签(非必需类型)的直接绑定。它将根据 工厂类型定义类型。
The difference between each binder is just the way to type inference. thus, you can use a more efficient binder when declaring module.
bind<Type>() with
明确定义 Type
。例如,当您将接口类型绑定到它的实现时,这一点很重要:
bind<Type>() with singleton { TypeImpl() }
现在假设您正在绑定一个非常简单的类型,例如配置数据对象:
bind<Config>() with singleton { Config("my", "config", "values") }
您已编写 Config
两次:一次在绑定定义中,一次在绑定本身中。
输入bind() from
:它不定义类型,而是将绑定类型的选择留给绑定本身。绑定类型是 隐式定义的 。例如,您可以这样编写 Config
绑定:
bind() from singleton { Config("my", "config", "values") }
请注意,将类型绑定到自身(这就是 bind() from
的用途)通常不是一个好主意(它违反了 IoC 模式)并且应该只用于非常简单的类型,例如数据 类.