Azure Service Fabric(预览版)Actors SDK为Actor继承提供了惊人的行为

时间:2015-05-25 23:29:07

标签: azure-service-fabric

在使用预览SDK时,我注意到在尝试为我正在开发的框架使用的一组相关Actor类型提供通用实现时,有一些令人惊讶的事情。

创建如下代码并不像预期的那样工作:

库:

public abstract class CommonActor : Actor, ICommonActor
{
    public abstract void DoStuff();
}

控制台应用程序:

public class MyActor : CommonActor
{
   public void override DoStuff()
   {
      //Stuff
   } 
}

创建我的Actor时,我对注册actor的调用失败。

fabricRuntime.RegisterActor(typeof(MyActor)); 

我收到的错误是该类型并非源自Actor,这显然是假的。

此外,我注意到这似乎打破了生成服务清单的工具。 (我必须通过禁用该工具来解决这个问题。)

这基本上阻止了我以我想要的方式为我的用户编写API。我根本不喜欢这样。与其他人报告的情况类似,这里对依赖注入方案几乎没有支持,对我来说极大地破坏了Actors模型的效用。

我错过了什么吗?有没有更好的方法来实现actor抽象?

2 个答案:

答案 0 :(得分:5)

只要使用ActorService装饰器显式命名子actor,就可以完成此操作。在您的示例中,这将转换为更新MyActor类,如此...

    [ActorService(Name = "MyActor")]      // Child actors need this decorator
    public class MyActor : CommonActor
    {
        public void override DoStuff()
        {
            //Stuff
        }
    }

Service Fabric documentation中还提供了更多信息。

答案 1 :(得分:1)

感谢您报告此问题。这是一个已知的限制,将在未来的版本中得到修复。虽然不是很漂亮,但你可以通过使用遏制来解决这个问题。