【发布时间】:2016-07-20 02:53:27
【问题描述】:
我正在使用 play-slick 和与之相关的程序(例如批处理)开发 Playframework2.5。
目前的项目结构是这样的
/rootPlayProject
/app
/controllers
/filters
/services
...
Modules
/core (sub-project - DAOs,services are placed here)
/batch (sub-project depends on core)
我几乎在所有地方都使用 Guice DI,包括数据库访问对象 (DAO)。
核心中的接口绑定在Module 中的core 中,最终被根项目中的Module 继承。
核心模块(/rootPlayProject/core/CoreModule.scala)
class CoreModule extends AbstractModule {
override def configure() = {
bind(classOf[FooDAO]).to(classOf[FooDAOImpl])
....
}
}
根模块(/rootPlayProject/Modules.scala)
class Module extends CoreModule {
override def configure() = {
super.configure()
bind(classOf[FooService]).to(classOf[FooServiceImpl])
}
}
虽然这作为 Playframework 应用程序非常有效,但我想将核心模块用于批处理程序,并且我想在没有 playframework 的情况下运行批处理。
到目前为止,我尝试过这样的事情
object BatchA {
def main(args: Array[String]) = {
val injector = Guice.createInjector(new CoreModule)
val foo = injector.getInstance(classOf[FooDAO])
//do something with foo.
}
}
但由于我的 DAO 需要 Playframework 创建的东西,例如 ExecutionContext、play.api.db.slick.DatabaseConfigProvider 和 @play.db.NamedDatabase,因此上面的代码无法运行。
我的问题是,如果没有 play 应用程序构建器,我怎样才能让这些东西绑定?
提前致谢。
【问题讨论】:
标签: scala playframework guice