我有以下的多模块项目结构使用SBT内置:喷雾REST API应用程序结构 - 建议所需
myProject-api
myProject-core
myProject的核心的组织结构如下:
它包含作为行为的某些行为给我的服务一个门面。例如,我有一个位于UserService前面的UserActor。位于NotificationService之前的NotificationActor等。
我还有一个特质暴露有演员谁是感兴趣:
trait MyProjectCoreActors {
def myAppCfg = MyProjConfig.appCfg
def userActor = myAppCfg.userActor
def notifyActor = myAppCfg.notifyActor
}
object MyProjectCoreActors {
... some initialization routing that initializes the MyProjConfig
}
因此,我国UserActor被定义为:
class UserActor(service: UserService) extends Actor {
...
...
}
我UserService如下:
class UserService(dbConfig: DbConfig) {
...
...
}
我有另一个名为MyProjectConfig的类,我使用application.co初始化nf文件。在这个文件中,我有连接细节到数据库等等。定义见下文
trait MyProjectConfig {
def actorSystem: ActorSystem
// the actors
def userActor: ActorRef
}
object MyProjectConfig {
def apply(appConfig: Config, system: ActorSystem): MyProjectConfig = {
new MyProjectConfig {
private val dbConfig = loadDBConfig(appConfig)
override val actorSystem = system
// each actor gets its own DBConfigInstance instance
override val userActor =
actorSystem.actorOf(
Props(new UserActor(UserService(dbConfig)))
)
}
}
}
我现在有喷雾路由:
trait MyProjectService extends HttpService with MyProjectCoreActors {
def pingRoute = path("ping") {
get {
userActor ! "newUser"
complete("pong!")
}
}
def pongRoute = path("pong") {
get { complete("pong!?") }
}
def route = pingRoute ~ pongRoute
}
什么是现在缺少的是一个方法调用MyProjectConfig.apply(....)的MyProjectConfig被如下初始化方法并传入Actor系统和底层application.conf!
这最初是一个基于Play的应用程序,我有一个Lifecycle插件,可以从中获取配置和演员系统的底层应用程序。我现在怎么能和Spray一样呢?
我有一个启动类,看起来像这样:
object MyBootHttpService extends App {
implicit val actorSystem = ActorSystem("myproj-actor-system")
}
我怎么能忽略这ActorSytem到MyProjectConfig.apply(....)?并从哪里可以得到application.conf?