有没有办法创建一个有两个接口的actor? 我想在Interfaces程序集中定义公共接口,在actor程序集中定义内部接口。原因是要分离客户端应该使用的方法和系统应该使用的方法。
例如:
class MyActor
: Actor
, IPublicInterface
, IInternalInterface
{
...
}
看起来这是不可能的,因为ActorService属性只允许使用单个名称。
有没有更好的方法(有效)隔离公共和内部方法?
答案 0 :(得分:1)
我相信你可以通过在可靠的Actors框架中促进多态性来实现这一目标:
另一种分离的方法是将公共和内部功能分解为更多的参与者。
答案 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)));