No implementation for dao.ImageDAO<models.ProductImageSet> was bound. while locating dao.ImageDAO<models.ProductImageSet>
trait ImageDAO[T <: ImageSet] {
def find(id: String): ImageDisplay[T]
def find(req: ImageSearch): ImageResponse[T]
}
class ProductImageDAO @Inject() (environment: Environment) extends ImageDAO[ProductImageSet] {
...
}
class ProfileImageDAO @Inject() (environment: Environment) extends ImageDAO[ProfileImageSet] {
...
}
case class ProductImageSet(swatchImage: BaseImage, smallImage: BaseImage, mediumImage: BaseImage, largeImage: BaseImage) extends ImageSet
case class ProfileImageSet(smallImage: BaseImage, mediumImage: BaseImage) extends ImageSet
trait ImageService[A <: ImageSet] {
def retrieve(id: String): ImageDisplay[A]
def retrieve(req: ImageSearch): ImageResponse[A]
}
class ImageServiceImpl[T <: ImageSet] @Inject() (imageDAO: ImageDAO[T]) extends ImageService[T] {
def retrieve(id: String): ImageDisplay[T] = imageDAO.find(id)
def retrieve(req: ImageSearch): ImageResponse[T] = ???
}
class MyModule extends AbstractModule {
protected override def configure() {
bind(new TypeLiteral[ImageDAO[ProductImageSet]](){}).to(classOf[ProductImageDAO]).asEagerSingleton()
bind(new TypeLiteral[ImageService[ProfileImageSet]](){}).to(classOf[ImageServiceImpl[ProfileImageSet]]).asEagerSingleton()
bind(new TypeLiteral[ImageService[ProductImageSet]](){}).to(classOf[ImageServiceImpl[ProductImageSet]]).asEagerSingleton()
}
}