Cia*_*tic 1 dependency-injection scala playframework playframework-2.4
玩2.4不鼓励使用GlobalSettings.onStart和整个Global对象.
我正在使用Play-slick,它在GitHub中有很好的DI示例,但它缺少一个如何进行数据库初始化的示例.
如何在使用DI时以及当GlobalSettings.onStart不可用时实现数据库初始化?
数据库初始化的常见情况是:如果在DEV模式下,请添加这些行,如果PROD执行这些行.想要的例子.
诀窍是将初始化放在注入类的构造函数中.这是一个例子:
添加app/modules/Database.scala:
package modules
import com.google.inject.AbstractModule
import com.google.inject.name.Names
trait Database {
def create(): Unit
def drop(): Unit
}
class TestDatabase extends Database {
initialize() // running initialization in constructor
def initialize() = {
println("Setup database with test data here")
}
def create() = ()
def drop() = ()
}
class ProdDatabase extends Database {
// similar to above
}
class DatabaseModule extends AbstractModule {
def configure() = {
bind(classOf[Database])
.annotatedWith(Names.named("development"))
.to(classOf[TestDatabase]).asEagerSingleton
bind(classOf[Database])
.annotatedWith(Names.named("production"))
.to(classOf[TestDatabase])
}
}
Run Code Online (Sandbox Code Playgroud)
加入conf/application.conf:
play.modules.enabled += "DatabaseModule"
Run Code Online (Sandbox Code Playgroud)
那就是开始.该.asEagerSingleton会,而无需你注入它运行的构造函数代码.当您想要选择要注入的那个时,您需要删除.asEagerSingleton并加载相应的数据库实现:
在服务/控制器中,例如:
@Inject @Named("development")数据库数据库
| 归档时间: |
|
| 查看次数: |
1643 次 |
| 最近记录: |