Service Fabric Actor实现多个接口的接口

我正在构建一个应用程序,其中我有多个不同的actor类型,它们对于某些不同的数据对象具有相同的行为(CRUD)。 为了更轻松地创建处理这个的代码,我试图创建一个接口,这些actor可以实现。

这意味着我有一个看起来像这样的actor接口:

public interface IMyActor1 : IActor, IDataActor, IDataActor 

IDataActor如下:

 public interface IDataActor where T : IDataItem { Task Create(T item); Task Read(string itemId); Task Update(T item); Task Delete(string itemId); } 

而自己的演员看起来像这样

 class MyActor1: Actor, IMyActor1 { ... } 

最初我尝试从IActor派生IDataActor ,但可以理解这是不允许的,我得到一个“通用接口不能远程”。 我尝试部署时出错,所以我尝试了这个。

当我构建项目时,我得到以下错误日志:

 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没有实现任何actor接口,但显然它确实如此。 有谁知道这是一个错误,还是有一个实际的解决方法? 使这项工作可以为我节省大量重复的代码。

谢谢!

Service Fabric当前不支持通用服务/ actor接口。 您看到的第二个错误是因为它还过滤掉了从未从IActorinheritance的接口inheritance的接口(例如您的IDataActor )。 可以在那里改进错误消息。

为了解决这个服务限制,我使用了Castle DynamicProxy(代码太长而且太复杂而无法解答;我可以在博客文章中写出来的时候)。

也就是说,我认为您可能需要考虑演员应该封装的不仅仅是数据。 您应该公开表示行为的操作。 否则,这很可能会导致高耦合,降低可维护性,重复代码等 – 哪种方式会破坏微服务的目的。