2016-04-15 6 views
0

俳優の階層に関する特定の情報を渡して、メッセージを受け取ったときに利用できるようにしています。たとえば、ユーザーあたり1つのアクターチェーンがあり、そのアクターのすべての子どもにユーザー情報(名前)を提供したいと考えています。Akka.netが俳優階層内の情報を引き継ぐ

名前を取得するために階層内の任意の子供からユーザーの俳優にアクセスしようとしていますが、それは良い練習であるかどうかわかりません。b)階層内に複数のレベルがあり、ユーザー名が明らかに動的である場合、これを達成できます。

だから私は、この(私は親の親にアクセスしたいと仮定)

便利なものを返さないと、階層内の二つのレベルをアップして行くようには見えない
var name = Context.ActorSelection("../..").Path.Name; 

を試してみました。

私が考えていたもう1つの選択肢は、アクター階層を作成し、下にあるすべてのノードをPropsで構築してユーザー名を渡したことです。これが正しいことかどうかわかりません。ですから、例えば:

public class MyActor: TypedActor 
{ 
    public MyActor(string id) 
    { 
     _id = id; 
     Context.ActorOf(Props.Create<ChildActor>(_id), "childname"); 
    } 
} 

のように...

答えて

3

私はあなたが解決しようとしている問題の種類を知りませんが、私は俳優のコンストラクタでない夫婦のuserIdに提案することができ(小道具)

あなたはユーザーの俳優の参照とユーザーのIDを持つリストを格納することができますし、子のアクターでは<PRESTART>アクションを使用してユーザーIDを要求します。

protected override void PreStart() 
     { 
      Context.Parent.Tell(new GetUserIdMessage()); 
      base.PreStart(); 
     } 

そしてこれは、ライトカップリングなしのコードと、この余分ないくつかのメッセージは、システムのパフォーマンスに影響を与えるべきではないことができますReceive<UserIdMessage>を追加し、俳優 内部のフィールドでこれを保管し

+0

理にかなっている、あなたに感謝 –