Last active
August 29, 2015 14:05
-
-
Save davegurnell/068256c76b8dce412542 to your computer and use it in GitHub Desktop.
Simple dependency injection
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
trait DatabaseLayer { | |
def dependency: Int | |
} | |
trait ConcreteDatabaseLayer extends DatabaseLayer { | |
def dependency: Int = 100 | |
} | |
trait DatabaseResource1 { | |
this: DatabaseLayer => | |
def resource1 = dependency * 10 | |
} | |
trait DatabaseResource2 { | |
this: DatabaseLayer => | |
def resource2 = dependency * 10 | |
} | |
trait Service1 extends DatabaseResource1 { | |
this: DatabaseLayer => | |
} | |
trait Service2 extends DatabaseResource2 { | |
this: DatabaseLayer => | |
} | |
class Application extends ConcreteDatabaseLayer with Service1 with Service2 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
trait DatabaseLayer { | |
def dependency: Int | |
} | |
class ConcreteDatabaseLayer extends DatabaseLayer { | |
def dependency: Int = 100 | |
} | |
class DatabaseResource1(dbLayer: DatabaseLayer) { | |
def resource1 = dbLayer.dependency * 10 | |
} | |
class DatabaseResource2(dbLayer: DatabaseLayer) { | |
def resource2 = dbLayer.dependency * 10 | |
} | |
class Service1(resource1: DatabaseResource1) | |
class Service2(resource2: DatabaseResource2) | |
class Application(service1: Service1, service2: Service2) | |
val layer = new ConcreteDatabaseLayer() | |
val service1 = new Service1(new DatabaseResource1(dbLayer)), | |
val service2 = new Service2(new DatabaseResource2(dbLayer))) | |
val app = new Application(nservice1, service2) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment