2011-10-29 102 views
3

我需要创建一个只能在运行时从配置文件中读取确切类型的actor。该actor的构造函数不是微不足道的,即它需要一些在配置文件中定义的参数。Akka - 使用反射创建演员

到现在为止,我试图做到这一点使用反射如下:

val actor = actorOf(constructor.newInstance(parameters: _*).asInstanceOf[T]).start 

不幸的是,这会导致一个“akka.actor.ActorInitializationException:ActorRef对演员的实例[...]是不在范围内,你不能使用'new MyActor'显式地创建一个actor的实例[...]“!

现在,我明白这可以防止泄漏对内部对象的引用的框架,但我怎么能通过这个问题?或者,我还可以怎样做,我试图以一种可行的方式去做?

回答

4

也许使用Java接口来创建参数参与者。创造的(Java)的代码如下所示:

ActorRef actor = actorOf(new UntypedActorFactory() { 
    public UntypedActor create() { 
    return new MyUntypedActor("service:name", 5); 
    } 
}); 

所以你传递一个工厂替代的作用。这可能会更好...