2015-12-01 2 views
0

Можно ли ввести класс контроллера в UntypedActor? Каков наилучший способ подключения к классу контроллера?Контроллер впрыска в акторе

package actors; 

import akka.actor.UntypedActor; 
import dispatchers.PushNotificationDispatcher; 
import play.Logger; 

import javax.inject.Inject; 
import java.util.List; 

public class PushNotificationActor extends UntypedActor { 

    @Inject 
    PushNotificationDispatcher dispatcher; 

    @Override 
    public void onReceive(Object message) throws Exception { 
     Logger.debug("PushNotificationActor started"); 
     dispatcher.createAndSendReminderPushNotification(); 
     Logger.debug("PushNotificationActor finished"); 
    } 

} 

ответ

0

Я думаю, что это невозможно сделать, как вы писали ... Актеры являются инкапсулированными классами. Самый лучший вариант, чтобы проверить, если этот код будет работать, но ИМО это не будет ...

Вы можете попробовать пройти эти инъекции через параметры, как показано ниже:

Props props2 = Props.create(MyActor.class, your params); 
0

Да, можно вводить экземпляры в ваш актер.

С игрой 2.4 это работает out of the box, просто вводите, как и в обычном классе.

Я всегда вставляю в конструктор, например. здесь JPAApi:

public class MyActor extends UntypedActor { 

    private final JPAApi jpa; 

    @Inject 
    public MyActor(JPAApi jpa) { 
    this.jpa = jpa; 
    } 

    @Override 
    public void onReceive(Object msg) throws Exception { 
    ... 
    } 
} 
+0

Я попытался реализовать код, но в моем случае инжектируемый контроллер всегда имеет значение null. У вас есть пример кода? – abuder

+0

Я добавил пример. Надеюсь, поможет. – Kris

+0

Это сложно, я также пробовал ваш код, но у меня есть NullPointerException Я добавил свой код на github https://github.com/aBuder/play-actor-sample – abuder