2016-03-20 7 views
1

Nach der documentation auf Play-Website, ist mein Actor wie folgt konfiguriert;Injizieren von Konfiguration und Service in einen Actor

public class SuggestionActor extends UntypedActor { 


    public static Props props = Props.create(SuggestionActor.class); 

    private DAOService service; 
    private Configuration config; 

    @Inject 
    public SuggestionActor(DAOService service, Configuration config) { 
     this.service = service; 
     this.config = config; 
    } 


    @Override 
    public void onReceive(Object msg) throws Exception { 
     if(msg instanceof SayHello) { 
      // check if msg comes 
      Logger.info(((SayHello) msg).name + config.getString("dao.mode")); 
     } 
    } 
} 

-

public class ActorProtocols { 

    public static class SayHello{ 
     public final String name; 


     public SayHello(String name) { 
      this.name = name; 
     } 
    } 
} 

MyModule (enabled in application.conf)

public class MyModule extends AbstractModule implements AkkaGuiceSupport { 

    @Override 
    protected void configure() { 
     bindActor(SuggestionActor.class, "suggestion-actor"); 
    } 
} 

mein Controller

@Singleton 
public class SuggestionController extends Controller { 

    private static Logger.ALogger LOGGER = Logger.of(SuggestionController.class); 

    @Inject @Named("suggestion-actor") 
    private ActorRef suggestionActor; 

    public Result suggest(String message) { 
     ask(suggestionActor, new SayHello(message), 10000); 
    } 
} 

Wenn ich versuche, meine DAO einzuspritzen Objekt und Konfiguration über Konstruktorinjektion in SuggestionActor, Pl ay löst einen aus Erstellt von: java.lang.IllegalArgumentException: kein passender Konstruktor in Klasse actors.SuggestionActor für Argumente gefunden []

Ideen?

Antwort

0

Ich habe versucht, Guice zu verwenden, um Komponenten in SuggestionActor zu injizieren, während Reops gleichzeitig (in meinem Controller) verwendet. Sobald ich Props entfernt habe, hat alles gut funktioniert. Beachten Sie, wenn Sie Props verwenden möchten, folgt dieser SO Post.