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

Fir*_*oso 2 azure-service-fabric

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

像下面这样创建代码似乎没有按预期工作:

图书馆:

public abstract class CommonActor : Actor, ICommonActor
{
    public abstract void DoStuff();
}
Run Code Online (Sandbox Code Playgroud)

控制台应用:

public class MyActor : CommonActor
{
   public void override DoStuff()
   {
      //Stuff
   } 
}
Run Code Online (Sandbox Code Playgroud)

在创建我的Actor时,我对注册actor的调用失败了.

fabricRuntime.RegisterActor(typeof(MyActor)); 
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,该类型不是从Actor派生的,这显然是假的.

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

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

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

Str*_*tic 5

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

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

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