可靠的Actor有多个接口?

时间:2016-10-06 23:24:17

标签: c# azure-service-fabric service-fabric-actor

有没有办法创建一个有两个接口的actor? 我想在Interfaces程序集中定义公共接口,在actor程序集中定义内部接口。原因是要分离客户端应该使用的方法和系统应该使用的方法。

例如:

class MyActor
    : Actor
    , IPublicInterface
    , IInternalInterface
{
    ...
}

看起来这是不可能的,因为ActorService属性只允许使用单个名称。

有没有更好的方法(有效)隔离公共和内部方法?

3 个答案:

答案 0 :(得分:1)

我相信你可以通过在可靠的Actors框架中促进多态性来实现这一目标:

https://azure.microsoft.com/en-us/documentation/articles/service-fabric-reliable-actors-polymorphism/

另一种分离的方法是将公共和内部功能分解为更多的参与者。

答案 1 :(得分:1)

如果有多个接口,则运行时无法生成服务的默认名称。您需要申请https://msdn.microsoft.com/en-us/library/azure/microsoft.servicefabric.actors.runtime.actorserviceattribute.aspx

[ActorService(Name =" MyActorService")]到您的actor实现。然后,您可以使用https://msdn.microsoft.com/en-us/library/azure/mt694503.aspx方法使用此服务名创建actor代理。

答案 2 :(得分:0)

我通过一些实验找到答案。

只要在ActorProxy.Create调用中指定的serviceUri是actor的Uri,就可以使用任何所需的接口。因此,对于上面的示例,以下代码将提供对IInternalInterface的访问。

ActorProxy.Create<IInternalInterface>(actorId, ActorNameFormat.GetFabricServiceUri(typeof(IPublicInterface)));