Azure Service Fabric(预览版)Actors SDK 为 Actor 继承提供了惊人的行为
Azure Service Fabric (Preview) Actors SDK provides astonishing behavior for Actor inheritance
在尝试使用预览版 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 抽象吗?
感谢您报告问题。这是一个已知的限制,将在未来的版本中得到修复。虽然不漂亮,但您可以通过使用遏制来解决。
只要使用 ActorService
装饰器明确命名子演员,现在就可以完成此操作。在您的示例中,这将转换为像这样更新 MyActor
class...
[ActorService(Name = "MyActor")] // Child actors need this decorator
public class MyActor : CommonActor
{
public void override DoStuff()
{
//Stuff
}
}
Service Fabric documentation 中还提供了更多信息。
在尝试使用预览版 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 抽象吗?
感谢您报告问题。这是一个已知的限制,将在未来的版本中得到修复。虽然不漂亮,但您可以通过使用遏制来解决。
只要使用 ActorService
装饰器明确命名子演员,现在就可以完成此操作。在您的示例中,这将转换为像这样更新 MyActor
class...
[ActorService(Name = "MyActor")] // Child actors need this decorator
public class MyActor : CommonActor
{
public void override DoStuff()
{
//Stuff
}
}
Service Fabric documentation 中还提供了更多信息。