当演员服务旋转时,我想自动订阅任何事件described in the documentation。手动订阅活动有效。但是,当实例化服务时,有没有办法自动订阅actor服务,就像OnActivateAsync()?
我尝试做的是通过依赖注入来解决这个问题,在MyActor类的实例化中它通过OnActivateAsync调用的接口来传递客户端的事件。但是我遇到依赖注入问题。
使用Microsoft.ServiceFabric.Actors.2.2.207应该支持对actor服务的依赖注入。现在,当实现Microsoft.ServiceFabric.Actors.Runtime.Actor时,会创建一个带有ActorService和ActorId参数的默认构造函数。
我想添加自己的构造函数,其中传入了一个额外的接口。如何编写actor服务的注册以添加依赖项?在默认的Program.cs Main中,它提供了这个
IMyInjectedInterface myInjectedInterface = null;
// inject interface instance to the UserActor
ActorRuntime.RegisterActorAsync<MyActor>(
(context, actorType) => new ActorService(context, actorType, () => new MyActor(myInjectedInterface))).GetAwaiter().GetResult();
然而,在它所说的行#34;()=&gt;新的MyActor(myInjectedInterface)&#34;它告诉我一个错误
代表&#39; Func&#39;不带0 参数
查看Actor类的构造函数,它具有以下内容
MyActor.Cs
internal class MyActor : Microsoft.ServiceFabric.Actors.Runtime.Actor, IMyActor
{
private ActorService _actorService;
private ActorId _actorId;
private IMyInjectedInterface _myInjectedInterface;
public SystemUserActor(IMyInjectedInterface myInjectedInterface, ActorService actorService = null, ActorId actorId = null) : base(actorService, actorId)
{
_actorService = actorService;
_actorId = actorId;
_myInjectedInterface = myInjectedInterface;
}
}
1)如何解决尝试解决Actor Dependency时收到的错误?
代表&#39; Func&#39;不带0 参数
奖金问题:
当我的无状态服务(调用客户端)调用时,如何解析IMyInjectedInterface以将接口实例注入到actor服务中?
答案 0 :(得分:4)
IMyInjectedInterface myInjectedInterface = null;
//inject interface instance to the UserActor
ActorRuntime.RegisterActorAsync<MyActor>(
(context, actorType) => new ActorService(context, actorType,
(service, id) => new MyActor(myInjectedInterface, service, id)))
.GetAwaiter().GetResult();
创建actor实例的函数的签名是:
Func<ActorService, ActorId, ActorBase>
框架提供了ActorService
和ActorId
的实例,您可以将其传递给Actor的构造函数,然后传递给基础构造函数。
奖金回答:
这里的用例与您的想法略有不同。这里的模式是通过接口解耦具体实现的一般模式 - 它不是客户端应用程序修改运行时行为的方式。因此,调用客户端不提供依赖项的具体实现(至少不通过构造函数注入)。依赖项在编译时注入。 IoC容器通常会这样做,或者您可以手动提供一个。