diff --git a/src/main/scala/com/escalatesoft/subcut/inject/BindingId.scala b/src/main/scala/com/escalatesoft/subcut/inject/BindingId.scala index f03b677..0c8d1d6 100644 --- a/src/main/scala/com/escalatesoft/subcut/inject/BindingId.scala +++ b/src/main/scala/com/escalatesoft/subcut/inject/BindingId.scala @@ -23,3 +23,11 @@ abstract class BindingId { if (shortName.last == '$') shortName.init else shortName } } + +abstract class TypedBindingId[T] { + lazy val bindingName = { + val shortName = this.getClass.getSimpleName + // strip the trailing $ for objects + if (shortName.last == '$') shortName.init else shortName + } +} diff --git a/src/main/scala/com/escalatesoft/subcut/inject/BindingModule.scala b/src/main/scala/com/escalatesoft/subcut/inject/BindingModule.scala index 54a9023..de9f7f4 100644 --- a/src/main/scala/com/escalatesoft/subcut/inject/BindingModule.scala +++ b/src/main/scala/com/escalatesoft/subcut/inject/BindingModule.scala @@ -618,6 +618,7 @@ trait MutableBindingModule extends BindingModule { outer => * @param name the string name to identify the binding when used in combination with the type parameter. */ def idBy(name: String) = identifiedBy(name) + def idBy(id: TypedBindingId[T]) = identifiedBy(id.bindingName) } // and a parameterized bind method to kick it all off diff --git a/src/test/scala/com/escalatesoft/subcut/inject/BindingIdObjectsTest.scala b/src/test/scala/com/escalatesoft/subcut/inject/BindingIdObjectsTest.scala index 1cea07c..cd23e00 100644 --- a/src/test/scala/com/escalatesoft/subcut/inject/BindingIdObjectsTest.scala +++ b/src/test/scala/com/escalatesoft/subcut/inject/BindingIdObjectsTest.scala @@ -43,7 +43,8 @@ class BindingIdObjectsTest extends FunSuite with Matchers { import module._ bind [String] idBy Mammal toSingle "Cheetah" bind [String] idBy Role toSingle "Run" - bind [String] idBy Vehicle toSingle "Gallop" +// bind [String] idBy Vehicle toSingle "Gallop" + bind [String] idBy PoolSize toSingle "Gallop" } val mtd = new Speedway @@ -55,6 +56,7 @@ class BindingIdObjectsTest extends FunSuite with Matchers { object Vehicle extends BindingId object Role extends BindingId object Mammal extends BindingId +object PoolSize extends TypedBindingId[Int] class Speedway(implicit val bindingModule: BindingModule) extends Injectable { val mammal = inject[String](Mammal) @@ -62,4 +64,4 @@ class Speedway(implicit val bindingModule: BindingModule) extends Injectable { val vehicle = inject[String]("Vehicle") override def toString = "I am a " + mammal + " that likes to " + role + " using a " + vehicle -} \ No newline at end of file +}