Create a gist now

Instantly share code, notes, and snippets.

// ...
import com.escalatesoft.subcut.inject._
import NewBindingModule._
//...
trait SomeService {
def name:String
}
object RealService extends SomeService {
def name = "real"
}
object FakeService extends SomeService {
def name = "fake"
}
object MySingleton {
def someMethod(someArgument:String)(implicit bindingModule:BindingModule):String = { // implicit argument is passed
val service = bindingModule.inject[SomeService](None) // pay attention to None
val serviceName = service.name
s"This is $serviceName service"
}
}
object SomeConfigurationModule extends NewBindingModule(module =>{
module.bind [SomeService] toSingle RealService
})
// for use on production
MySingleton.someMethod("ololo")(SomeConfigurationModule)
// for testing
SomeConfigurationModule.modifyBindings { implicit bindingModule =>
bindingModule.bind [SomeService] toSingle FakeService
MySingleton.someMethod("argument")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment