Setup
I have the following setup to proxy a request to a server providing images for an application
class ModuleDependencies
  extends SimpleModule((_, conf) => {
    ...
    val httpClient: HttpClient.Default = HttpClient.Default()
    Seq(
      ...
      bind[SttpBackend[Future, Any]]
        .qualifiedWith("sttp-backend")
        .toInstance(httpClient.backend)
      )
  })
and
@Singleton
class ControllerProxy @Inject() (implicit
  cc: ControllerComponents,
  config: Configuration,
  ec: ExecutionContext,
  @Named("sttp-backend") backend: SttpBackend[Future, Any])
  extends AbstractController(cc) with LazyLogging {
  def proxyImageRequest: Action[AnyContent] = Action.async {
    request: Request[AnyContent] =>
      ...
      emptyRequest
        .method(Method.GET, url)
        .header("Authorization", config.authKey)
        .followRedirects(true)
        .readTimeout(Duration("10s")
        .response(asByteArray)
        .send(backend)
        .map(returnJpeg(_))
        .recover { case e =>
          logger.error("Exception caught while proxying image request " + e.getMessage)
          InternalServerError
        }
  }
}
and in my application.conf
play {
  modules.enabled += module.ModuleDependencies
  ...
}
Problem
The project compiles no problem, but when I run the server and ping the health endpoint to I get the following exception:
 Internal server error, for (GET) [/api/health-check] ->
  play.api.UnexpectedException: Unexpected exception[CreationException: Unable to create injector, see the following errors:
1) [Guice/MissingImplementation]: No implementation for SttpBackend<Future, Object> annotated with @name.Named("sttp-backend") was bound.
Did you mean?
    SttpBackend annotated with @name.Named("sttp-backend") bound at module.ModuleDependencies$$anonfun$$lessinit$greater$1.apply(ModuleDependencies.scala:25):
Binding(interface SttpBackend qualified with QualifierInstance(@inject.Named(value=sttp-backend)) to ProviderTarget(BindingKey$$anon$1@118f795e))
      \_ installed by: Modules$OverrideModule -> GuiceableModuleConversions$$anon$4
Requested by:
1  : controllers.ControllerProxy.<init>(ControllerProxy.scala:27)
      \_ for 4th parameter backend
     at router.Routes.<init>(Routes.scala:60)
      \_ for 5th parameter ControllerProxy_2
     at RoutesProvider$.bindingsFromConfiguration(BuiltinModule.scala:139):
Binding(class router.Routes to self)
      \_ installed by: Modules$OverrideModule -> GuiceableModuleConversions$$anon$4
Learn more:
  https://github.com/google/guice/wiki/MISSING_IMPLEMENTATION
One solution
One solution would be to just create a case class and wrap the SttpBackend[Future, Any] and inject that. Because the type-checker can then do it's magic.
case class SttpFutureBackend(unwrap: SttpBackend[Future, Any]) {}
Question
My question is not how to get it to work but understand why the named injection failed - or how to investigate why it failed.
The Error message indicates that the named injection is present and it even suggests me using it, but I don't understand how it fails to use it, given that the dependency injection framework is aware of it.
 
    