具有多个接口的可靠演员?
Reliable Actor with multiple interfaces?
有没有办法创建具有两个接口的 actor?
我想在 Interfaces 程序集中定义 public 接口,在 actor 程序集中定义内部接口。原因是把客户端应该使用的方法和系统应该使用的方法分开。
例如:
class MyActor
: Actor
, IPublicInterface
, IInternalInterface
{
...
}
这似乎是不可能的,因为 ActorService 属性只允许一个名称。
是否有更好的(可行的)方法来隔离 public 和内部方法?
我相信您可以通过促进 Reliable Actors 框架中的多态性来实现这一点:
想到的另一种隔离方法是将 public 和内部功能分解为更多参与者。
我通过一些实验找到了答案。
您可以使用任何您想要的接口,只要在 ActorProxy.Create 调用中指定的 serviceUri 是 actor 的 Uri。因此,对于我上面的示例,以下代码将提供对 IInternalInterface 的访问权限。
ActorProxy.Create<IInternalInterface>(actorId, ActorNameFormat.GetFabricServiceUri(typeof(IPublicInterface)));
当您有多个接口时,运行时无法为服务生成默认名称。您需要申请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 代理。
有没有办法创建具有两个接口的 actor? 我想在 Interfaces 程序集中定义 public 接口,在 actor 程序集中定义内部接口。原因是把客户端应该使用的方法和系统应该使用的方法分开。
例如:
class MyActor
: Actor
, IPublicInterface
, IInternalInterface
{
...
}
这似乎是不可能的,因为 ActorService 属性只允许一个名称。
是否有更好的(可行的)方法来隔离 public 和内部方法?
我相信您可以通过促进 Reliable Actors 框架中的多态性来实现这一点:
想到的另一种隔离方法是将 public 和内部功能分解为更多参与者。
我通过一些实验找到了答案。
您可以使用任何您想要的接口,只要在 ActorProxy.Create 调用中指定的 serviceUri 是 actor 的 Uri。因此,对于我上面的示例,以下代码将提供对 IInternalInterface 的访问权限。
ActorProxy.Create<IInternalInterface>(actorId, ActorNameFormat.GetFabricServiceUri(typeof(IPublicInterface)));
当您有多个接口时,运行时无法为服务生成默认名称。您需要申请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 代理。