我试图传递有关演员层次结构的某些信息,以便在收到消息时可用。例如,我每个用户有一个演员链,我想在该演员的所有孩子中提供用户信息(名称)。
目前我试图从层次结构中的任何孩子访问用户角色以获取名称但是a)我不知道这是否是一种良好的做法而且b)简单当我在层次结构中有多个级别并且用户名显然是动态的时候,我不知道是否可以实现这一点。
所以我试过这个(假设我想访问父母的父母)
var name = Context.ActorSelection("../..").Path.Name;
这不会返回任何有用的东西,而且似乎不会在层次结构中上升两级。
我认为另一个选项是创建actor层次结构并使用Props构建下面的所有节点并传入用户名,我再也不知道这是不是一个好的做法/正确的事情去做。例如:
public class MyActor: TypedActor
{
public MyActor(string id)
{
_id = id;
Context.ActorOf(Props.Create<ChildActor>(_id), "childname");
}
}
等等......
答案 0 :(得分:3)
我不知道你将要解决什么样的问题,但我可以建议不要在演员构造函数(道具)中结合userId
在root actor中你可以存储一个包含用户actor引用和用户id的列表(dict),然后在使用<PRESTART>
动作的子actor中请求用户ID。
protected override void PreStart()
{
Context.Parent.Tell(new GetUserIdMessage());
base.PreStart();
}
然后添加Receive<UserIdMessage>
并将其存储在actor内的字段中
这将允许没有耦合的写代码,这些额外的消息不会对系统性能产生影响