3

アクター サービスが起動したら、ドキュメント に記載されているイベントのいずれかに自動サブスクライブしたいと考えています。イベントを手動でサブスクライブすると機能します。ただし、サービスがインスタンス化されたときに、OnActivateAsync() のようにアクター サービスを自動サブスクライブする方法はありますか?

私がやろうとしていたのは、MyActor クラスのインスタンス化時に OnActivateAsync が呼び出してクライアントのイベントをサブスクライブするインターフェイスに渡す依存性注入によってこれを解決することでした。ただし、依存性注入に問題があります。

Microsoft.ServiceFabric.Actors.2.2.207 を使用すると、アクター サービスへの依存関係の挿入がサポートされるはずです。Microsoft.ServiceFabric.Actors.Runtime.Actor を実装すると、ActorService および ActorId 引数を使用して既定のコンストラクターが作成されます。

追加のインターフェイスが渡される独自のコンストラクターを追加したいと考えています。依存関係を追加するためにアクター サービスの登録をどのように記述しますか? デフォルトの Program.cs Main では、これを提供します

IMyInjectedInterface myInjectedInterface = null;

// inject interface instance to the UserActor
ActorRuntime.RegisterActorAsync<MyActor>(
   (context, actorType) => new ActorService(context, actorType, () => new MyActor(myInjectedInterface))).GetAwaiter().GetResult();

ただし、「() => new MyActor(myInjectedInterface)」と書かれている行では、エラーが表示されます

デリゲート 'Func' は 0 引数を取らない

Actor クラスのコンストラクターを見ると、次のようになっています。

MyActor.Cs

internal class MyActor : Microsoft.ServiceFabric.Actors.Runtime.Actor, IMyActor
{
    private ActorService _actorService;
    private ActorId _actorId;
    private IMyInjectedInterface _myInjectedInterface;

    public SystemUserActor(IMyInjectedInterface myInjectedInterface, ActorService actorService = null, ActorId actorId = null) : base(actorService, actorId)
    {
        _actorService = actorService;
        _actorId = actorId;
        _myInjectedInterface = myInjectedInterface;
    }
}

1) アクターの依存関係を解決しようとしたときに表示されるエラーを解決するにはどうすればよいですか?

デリゲート 'Func' は 0 引数を取らない

ボーナス質問:

ステートレス サービス (呼び出し側クライアント) によって呼び出されたときに、インターフェイス インスタンスの IMyInjectedInterface がアクター サービスに注入されるように解決するにはどうすればよいですか?

4

1 に答える 1