2

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

创建如下代码似乎无法按预期工作:

图书馆:

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

控制台应用程序:

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

创建我的演员时,我注册演员的电话失败。

fabricRuntime.RegisterActor(typeof(MyActor)); 

我收到一个类型不是从 Actor 派生的错误,这显然是伪造的。

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

这基本上阻止了我以我想要的方式为我的用户编写 API。我一点也不喜欢。与其他人报道的类似,这里几乎不支持依赖注入场景,这对我来说极大地破坏了 Actors 模型的实用性。

我错过了什么吗?有没有更好的方法在这里实现演员抽象?

4

2 回答 2

5

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

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

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

于 2016-03-02T17:56:09.357 回答
1

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

于 2015-05-27T19:05:54.013 回答