【发布时间】:2016-06-07 11:41:49
【问题描述】:
Play 应用包含一个在应用启动期间初始化 DB/Tables 的自定义模块。 从 v2.5.x 开始,需要注入应用程序模式(prod、test、dev)而不是使用 Current。我尝试在模块代码中应用以下注入参数,但看到编译错误。
trait MyInit[Environment] {
val env: Environment
}
class MyInitClass[Environment] @Inject() (
val env: Environment
) extends MyInit[Environment] {
initializeDB()
def initializeDB() = {
Logger.info("MyINIT: Creating database...")
MyDBService.createDatabase()
Logger.info("MyINIT: Creating tables...")
MyDBService.createTables()
}
}
class MyModule(environment: Environment,
configuration: Configuration) extends AbstractModule with ScalaModule {
def configure() = {
bind[MyInit[Environment]].to[MyInitClass[Environment]].asEagerSingleton()
}
}
在 Play 2.5.x (Scala) 中的模块初始化期间是否有规定的查找环境/模式的方法?
【问题讨论】:
-
编译错误说明了什么?我也不清楚为什么你在特征和扩展特征的类中都使用类型参数
Environment。它应该在没有类型参数的情况下工作。 -
“实现限制:目前不支持注释上的多个参数列表。”我正在尝试访问/传递环境对象以查找模式,以便我可以初始化所需的数据库。
-
这很有趣。你如何编译你的代码?我昨天或前一天在 Stackoverflow 上看到了一个类似编译错误的问题,但由于某种原因它很快就被删除了。我想问题出在 Intellij IDEA 上。
-
无论如何我认为将依赖项传递给
AbstractModule构造函数是不合格的。您需要将它们注入MyInitClass的构造函数或字段。 -
另外,据我所知,您不能仅使用带有类型参数的
bind来绑定泛型类型。你需要使用TypeLiteralthejavablog.wordpress.com/2008/11/17/…
标签: scala dependency-injection guice playframework-2.5