gpt4 book ai didi

c# - 实现多个接口(interface)的 Service Fabric Actor 接口(interface)

转载 作者:行者123 更新时间:2023-11-30 12:23:25 25 4
gpt4 key购买 nike

我正在构建一个应用程序,其中有多个不同的参与者类型,这些参与者类型对于某些不同的数据对象具有相同类型的行为(CRUD)。为了更轻松地创建处理此问题的代码,我尝试创建一个接口(interface),供这些参与者实现。

这意味着我有一个看起来像这样的 Actor 界面:

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);
}

Actor 本身就是这样的

class MyActor1: Actor, IMyActor1
{
...
}

最初我尝试有 IDataActor<T>源自IActor ,但可以理解这是不允许的,并且我得到“通用接口(interface)无法远程”。当我尝试部署时出错,所以我尝试了这个。

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

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 接口(interface),但它显然实现了。有谁知道这是一个错误,或者是否有实际的解决方法?让这个工作可以为我节省大量重复的代码。

谢谢!

最佳答案

Service Fabric 目前不支持通用服务/参与者接口(interface)。您看到的第二个错误是因为它还过滤掉了继承自不继承于 IActor 的接口(interface)的接口(interface)。 (例如您的 IDataActor<T> )。错误消息可以在那里得到改进。

为了解决服务的这个限制,我使用了 CaSTLe DynamicProxy(对于一个如此的答案来说,代码太长太复杂;当我得到时间)。

也就是说,我认为您可能需要考虑参与者应该封装的不仅仅是数据。您应该公开代表行为的操作。否则,这很可能会导致高耦合、可维护性下降、重复代码等——这违背了微服务的目的。

关于c# - 实现多个接口(interface)的 Service Fabric Actor 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36938657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com