Ich erstelle eine Anwendung, in der ich mehrere verschiedene Akteurentypen mit der gleichen Art von Verhalten (CRUD) in Bezug auf einige verschiedene Datenobjekte habe. Um einfacher Code zu erstellen, der das handhabt, habe ich versucht, eine Schnittstelle zu erstellen, die diese Akteure implementieren können.Service Fabric Actor-Schnittstellen, die mehrere Schnittstellen implementieren
Das bedeutet, dass ich ein Schauspieler-Schnittstelle haben, die etwa wie folgt aussieht:
public interface IMyActor1 :
IActor,
IDataActor<DataItem1>,
IDataActor<DataItem2>
Wo die IDataActor<T>
wie folgt aussieht:
public interface IDataActor<T> where T : IDataItem
{
Task Create(T item);
Task<T> Read(string itemId);
Task Update(T item);
Task Delete(string itemId);
}
Und der Schauspieler es selbst sieht aus wie dieses
class MyActor1: Actor, IMyActor1
{
...
}
Ursprünglich versuchte ich IDataActor<T>
vonabzuleiten, aber verständlicherweise ist dies nicht erlaubt, und ich bekomme eine "Generische Schnittstellen können nicht entfernt werden." Fehler, wenn ich versuche, zu implementieren, also habe ich das versucht.
Als ich das Projekt jetzt bauen bekomme ich folgende Fehlerprotokoll:
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)
Der Fehler behauptet, dass MyActor1 implementieren keine Schauspieler Schnittstellen, aber es ist eindeutig der Fall ist. Weiß jemand, dass dies ein Fehler ist, oder wenn es einen praktischen Workaround gibt? Wenn ich das funktioniere, könnte ich viel doppelten Code sparen.
Danke!
Ich selbst lief auf dieses Problem, aber dann erkannte ich, dass ich nicht wirklich einen Vorteil durch die Schnittstelle Vererbung bekam. Mein Vorschlag wäre, Ihre Schnittstellen und Klassen in Nicht-Akteur-Typen zu extrahieren und diese zu verwenden. Nur meine zwei Cent. –
Dies scheint ein großer Fehler/Aufsicht zu sein. Ich habe diese Frage buchstäblich gestellt. – Tony