import wvlet.airframe._ import wvlet.airspec._ case class Foo[A](a: A) trait ParametricService[A] { private val alg = bind[Foo[A]] } trait ConcreteService { private val alg = bind[Foo[Int]] } class ParametricInjection extends AirSpec { override def design: Design = Design.newDesign .bind[Foo[Int]].toInstance(Foo(0)) .bind[ConcreteService].toSingleton .bind[ParametricService[Int]].toSingleton test("Foo[Int] should be built") { _: Foo[Int] => } test("ConcreteService should be built") { _: ConcreteService => } test("ParametricService[Int] should be built") { _: ParametricService[Int] => } }