Q:

Passing a constructor argument to a Play managed Actor

I have a supervisor and a worker actor. The worker calls a service. All these are managed by Play(/Guice). 
Here is a simplification of the code: 
class SupervisorActor @Inject()(workerFactory: WorkerActor.Factory, serviceA: AService)
    extends Actor
    with InjectedActorSupport {

  override def receive: Receive = {
    case message => injectedChild(workerFactory(serviceA), "childActorName").forward(message)
  }

}

class WorkerActor @Inject()(serviceA: AService) extends Actor {
  override def receive: Receive = {
    case _ => println(serviceA.getMessage())
  }
}

object WorkerActor {
  trait Factory {
    def apply(serviceA: AService): Actor
  }
}

@ImplementedBy(classOf[AServiceImpl])
trait AService {
  def getMessage(): String
}

class AServiceImpl @Inject()(configuration: Configuration) extends AService {
  override def getMessage(): String = configuration.get[String]("id1")
}

Module.scala(configure method):
bindActor[SupervisorActor]("supervisor")
bindActorFactory[WorkerActor, WorkerActor.Factory]

Everything works perfectly. So far there is one instance of every class.
Now, AServiceImpl.getMessage() needs to lookup a dynamic String (not just "id1" everytime). So changed it like so:
class AServiceImpl @Inject()(configuration: Configuration, propertyId: String) extends AService {
  override def getMessage(): String = configuration.get[String](propertyId)
}

And removed @ImplementedBy(classOf[AServiceImpl]) from trait AService.
The idea was to instantiate 2 instances of the supervisor, worker & service and wire them together in Module.scala. So I started out with this in Module.scala:
val aServive: AService = new AServiceImpl(configuration, "id1")

The challenge now is to get this instance injected into the Supervisor.  
Appreciate any help on these:

How do I access Guice managed WorkerActor.Factory in configure() (Module.scala) when the injector is still under construction?
I tried using a @Provides method with the WorkerActor.Factory as a parameter. But bindActor() calls are only permitted in configure(). Not in @Provides methods.
How do I have Play inject workerFactory: WorkerActor.Factory but supply my own AService?. As far as I can see, bindActor(...) does not seem to support this.

Edit:
My solution based on Renato's answer below for future use:
I had to implement one ActorRef Provider for each instance of the actor (object graph) needed. Like so:
class PropertyId1SupervisorActorProvider @Inject()(configuration: Configuration,
                                                   workerFactory: WorkerActor.Factory,
                                                   actorSystem: ActorSystem)
    extends Provider[ActorRef] {

  override def get(): ActorRef = {
    val aService: AService = new AServiceImpl(configuration, "propertyId1")
    actorSystem.actorOf(Props(classOf[SupervisorActor], workerFactory, aService))
  }
}

Then bind this provider in Module.scala:
bind(classOf[ActorRef])
      .annotatedWith(Names.named("propertyId1Actor"))
      .toProvider(classOf[PropertyId1SupervisorActorProvider])

This does need a bit of work to get another instance going. But this is the best solution I have for now. If there are recommendations on improving this, I am all ears.

A:

I think you can simplify it by just using a provider that does everything without relying much on any Guice wiring. The provider should return the Actor you want to inject in other parts of the system. All the graph under the Actor can and should be hidden, in other words, not exposed to the DI. 
Just create a provider for the actor, inject the ActorSystem and Configuration so you can create the actor and build the service instances. 
Since you need to have two instances of that actor, will need to have different names for them and bind them in Guice with different names. 

