diff options
Diffstat (limited to 'src/main/scala/myapp/cake/Container.scala')
-rw-r--r-- | src/main/scala/myapp/cake/Container.scala | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/main/scala/myapp/cake/Container.scala b/src/main/scala/myapp/cake/Container.scala new file mode 100644 index 0000000..ca952cd --- /dev/null +++ b/src/main/scala/myapp/cake/Container.scala @@ -0,0 +1,49 @@ +package myapp.cake + +import database.DBI +import logger.FileLogger + +import myapp.MyApp + +class Container ( + logFileName: String = "out.log", + dsn: String = "dbi:mysql:myapp", + username: String = "doy", + password: String = "blah" +) extends HasApplication with HasLogger with HasDatabase { + def application = new Application + // def logger = new Logger(logFileName) // non-singleton + lazy val logger = new Logger(logFileName) // singleton + def database = Database.connect(dsn, username, password) +} + +trait HasLogger extends services.HasLogger { + type LoggerType = Logger + + class Logger ( + logFileName: String + ) extends FileLogger(logFileName) with LoggerService +} + +trait HasDatabase extends services.HasDatabase { + type DatabaseType = Database + + class Database protected ( + dsn: String, + username: String, + password: String + ) extends DBI(dsn, username, password) with DatabaseService + + object Database { + def connect(dsn: String, username: String, password: String) = + new Database(dsn, username, password) + } +} + +trait HasApplication extends services.HasApplication { + this: HasLogger with HasDatabase => + + type ApplicationType = Application + + class Application extends MyApp(logger, database) with ApplicationService +} |