我需要创建一个actor,其精确类型仅在运行时从配置文件中读取。该actor的构造函数非常简单,即它需要一些在配置文件中定义的参数。
到目前为止,我已尝试使用反射执行此操作,如下所示:
val actor = actorOf(constructor.newInstance(parameters: _*).asInstanceOf[T]).start
不幸的是,这会导致“akka.actor.ActorInitializationException:actor [...]实例的ActorRef不在范围内。您无法使用'new MyActor'显式创建actor的实例。[.. ]“!
现在,我明白这可以保护框架不会泄漏对内部对象的引用,但是如何才能解决这个问题呢?或者,我怎样才能以一种有效的方式做我想做的事情呢?
答案 0 :(得分:4)
也许使用Java界面来创建带参数的actor。用于创建的(Java)代码如下所示:
ActorRef actor = actorOf(new UntypedActorFactory() {
public UntypedActor create() {
return new MyUntypedActor("service:name", 5);
}
});
所以你传递工厂而不是函数。这可能会更好......