在使用预览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抽象?
答案 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)
感谢您报告此问题。这是一个已知的限制,将在未来的版本中得到修复。虽然不是很漂亮,但你可以通过使用遏制来解决这个问题。