Skip to content

Instantly share code, notes, and snippets.

@davegurnell
Last active August 29, 2015 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save davegurnell/068256c76b8dce412542 to your computer and use it in GitHub Desktop.
Save davegurnell/068256c76b8dce412542 to your computer and use it in GitHub Desktop.
Simple dependency injection
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
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