使用 Kodein 将对象实例传递给构造函数
Passing object instance to constructor using Kodein
我是 Kotlin 和 Kodein 的新手。我正在尝试使用 Java 库,我需要将单例传递给我的构造函数之一。我无法弄清楚如何获得实际实例。因为我需要将一个实例传递给构造函数,所以我相信我需要使用 DKodein,所以没有使用延迟加载?
val kodein: DKodein = Kodein.direct {
bind<DataSource>() with singleton {
val config = HikariConfig()
config.jdbcUrl = "jdbc:postgresql://localhost:5432/mydb"
config.username = "username"
config.password = "password"
config.driverClassName = "org.postgresql.Driver"
HikariDataSource(config)
}
bind<DatabaseContext>() with singleton {
// I thought kodein.instance() here would provide the DataSource
// instance I declared above. However I get the error (from Intellij)
// TypeInference failed. Expected type mismatch.
// Required: DataSource!
// Found: KodeinProperty<???>
DatabaseContext(kodein.instance())
}
}
有什么简单的方法可以做到这一点吗?还是我做错了?
谢谢。
在 Kodein 的初始化块中,您必须使用 instance()
而没有 kodein.
。
//use Kodein instead of DKodein
val kodein: Kodein = Kodein {
bind<DataSource>() with singleton {
val config = HikariConfig()
config.jdbcUrl = "jdbc:postgresql://localhost:5432/mydb"
config.username = "username"
config.password = "password"
config.driverClassName = "org.postgresql.Driver"
HikariDataSource(config)
}
bind<DatabaseContext>() with singleton {
//use instance() without kodein
//or use dkodein.instance()
DatabaseContext(instance())
}
}
Kodein 区分DKodein
和Kodein
。
DKodein
允许实例直接访问。
Kodein
通过 by
创建委托属性。
Kodein 的初始化块提供对这两个接口的访问。但是 dkodein
是默认值。如果您使用 kodein.instance()
,则使用 属性 初始化程序版本。
在初始化块之外,您可以像这样访问 DKodein
:
val datasource: DataSource = kodein.direct.instance()
我是 Kotlin 和 Kodein 的新手。我正在尝试使用 Java 库,我需要将单例传递给我的构造函数之一。我无法弄清楚如何获得实际实例。因为我需要将一个实例传递给构造函数,所以我相信我需要使用 DKodein,所以没有使用延迟加载?
val kodein: DKodein = Kodein.direct {
bind<DataSource>() with singleton {
val config = HikariConfig()
config.jdbcUrl = "jdbc:postgresql://localhost:5432/mydb"
config.username = "username"
config.password = "password"
config.driverClassName = "org.postgresql.Driver"
HikariDataSource(config)
}
bind<DatabaseContext>() with singleton {
// I thought kodein.instance() here would provide the DataSource
// instance I declared above. However I get the error (from Intellij)
// TypeInference failed. Expected type mismatch.
// Required: DataSource!
// Found: KodeinProperty<???>
DatabaseContext(kodein.instance())
}
}
有什么简单的方法可以做到这一点吗?还是我做错了?
谢谢。
在 Kodein 的初始化块中,您必须使用 instance()
而没有 kodein.
。
//use Kodein instead of DKodein
val kodein: Kodein = Kodein {
bind<DataSource>() with singleton {
val config = HikariConfig()
config.jdbcUrl = "jdbc:postgresql://localhost:5432/mydb"
config.username = "username"
config.password = "password"
config.driverClassName = "org.postgresql.Driver"
HikariDataSource(config)
}
bind<DatabaseContext>() with singleton {
//use instance() without kodein
//or use dkodein.instance()
DatabaseContext(instance())
}
}
Kodein 区分DKodein
和Kodein
。
DKodein
允许实例直接访问。Kodein
通过by
创建委托属性。
Kodein 的初始化块提供对这两个接口的访问。但是 dkodein
是默认值。如果您使用 kodein.instance()
,则使用 属性 初始化程序版本。
在初始化块之外,您可以像这样访问 DKodein
:
val datasource: DataSource = kodein.direct.instance()