我需要创建一个角色,其确切类型仅在运行时从配置文件中读取。该actor的构造函数是非平凡的,也就是说,它需要一些在配置文件中定义的参数。
到目前为止,我一直尝试使用反射来完成此操作,如下所示:
val actor = actorOf(constructor.newInstance(parameters: _*).asInstanceOf[T]).start
不幸的是,这会导致一个"akka.actor"。ActorInitializationException: ActorRef for instance of actor[…]不在范围之内。你不能使用new MyActor显式地创建一个actor实例。[…]"!
现在,我知道这可以保护框架不泄漏对内部对象的引用,但是我如何解决这个问题呢?或者,我还能怎么做我想做的事情呢?
可以使用Java接口来创建带有参数的actor。创建的(Java)代码如下所示:
ActorRef actor = actorOf(new UntypedActorFactory() {
public UntypedActor create() {
return new MyUntypedActor("service:name", 5);
}
});
所以你传递一个工厂而不是一个函数。