app/Module.scala (25 lines of code) (raw):

import actors.{Audit, ObjectCache} import com.google.inject.AbstractModule import helpers.UserInfoCache import models.{AuditRecordDAO, AuditRecordDAOElastic, AuditRecordDAOMongo, AuditRecordDAONull, ServerTokenDAO, ServerTokenDAORedis} import org.slf4j.LoggerFactory import play.api.libs.concurrent.AkkaGuiceSupport class Module extends AbstractModule with AkkaGuiceSupport { private val logger = LoggerFactory.getLogger(getClass) override def configure(): Unit = { bind(classOf[UserInfoCache]).asEagerSingleton() sys.props.get("audit") match { case Some("elasticsearch") | None => bind(classOf[AuditRecordDAO]).to(classOf[AuditRecordDAOElastic]) case Some("mongo") => bind(classOf[AuditRecordDAO]).to(classOf[AuditRecordDAOMongo]) case Some("none") => bind(classOf[AuditRecordDAO]).to(classOf[AuditRecordDAONull]) case _=> throw new RuntimeException("the `audit` system property must be set to elasticsearch, mongo or none") } bind(classOf[ServerTokenDAO]).to(classOf[ServerTokenDAORedis]) bindActor[ObjectCache]("object-cache") bindActor[Audit]("audit-actor") } }