いくつかの異なるデータオブジェクトに関して同じ種類の動作(CRUD)を持つ複数の異なるアクタータイプがあるアプリケーションを構築しています。これを処理するコードをより簡単に作成するために、これらのアクターが実装できるインターフェースを作成しようとしました。サービスファブリックアクター複数のインターフェイスを実装するインターフェイス
public interface IMyActor1 :
IActor,
IDataActor<DataItem1>,
IDataActor<DataItem2>
IDataActor<T>
は次のようになります:
この
は私がこのような何かに見える俳優・インターフェースを持っていることを意味しpublic interface IDataActor<T> where T : IDataItem
{
Task Create(T item);
Task<T> Read(string itemId);
Task Update(T item);
Task Delete(string itemId);
}
と俳優のそれの自己は、この
のように見えますclass MyActor1: Actor, IMyActor1
{
...
}
元私はIDataActor<T>
から派生しましたIActor
、これは許可されていませんが、わかりやすく "Generic interfaces can not remoted"と表示されます。私が展開しようとするとエラーが発生したので、私はこれを試しました。
私は今、プロジェクトをビルドするとき、私は、次のエラーログを取得:
System.ArgumentException: The actor type 'MyProject.ActorProject.MyActor1' does not implement any actor interfaces. An actor interface is the one that derives from 'Microsoft.ServiceFabric.Actors.IActor' type.
Parameter name: actorType
at Microsoft.ServiceFabric.Actors.Runtime.ActorTypeInformation.Get(Type actorType)
at FabActUtil.Tool.LoadActors(Assembly inputAssembly, IList`1 actorFilters, IList`1 actorTypes)
at FabActUtil.Tool.LoadActors(ToolContext context)
at FabActUtil.Tool.ProcessInput(ToolContext context)
at FabActUtil.Tool.Run(ToolArguments arguments)
at FabActUtil.Program.Main(String[] args)
エラーは、MyActor1はどんな俳優インタフェースを実装していないと主張しているが、それははっきりしません。これはバグか、実用的な回避策があれば誰でも知っていますか?この作業をすることで、重複したコードをたくさん保存することができます。
ありがとうございます!
私はこの問題に直面しましたが、インタフェースを継承することによって実際には何のメリットも得られていないことに気付きました。私の提案は、あなたのインターフェースとクラスを非アクターのタイプに抽出し、それらを使用することです。ちょうど私の2セント。 –
これは大きな欠陥/見落としのようです。私は文字通り、この同じ質問をしました。 – Tony