如何使用 Akka.Hosting 为 Actors 注入参数? 即 public ExampleActor(Service1 service){ _service = service; ....}
Service1是在启动时添加到IServiceCollection中的Service。
您可以通过以下语法将 Akka.DependencyInjection 与 Akka.Hosting 一起使用:
// arrange
using var host = await StartHost(collection =>
{
collection.AddAkka("MyActorSys", (builder, sp) =>
{
builder.WithActors((system, registry, resolver) =>
{
var singletonActor = system.ActorOf(resolver.Props<SingletonActor>(), "singleton");
registry.TryRegister<SingletonActor>(singletonActor);
});
});
});
// act
var singletonInstance = host.Services.GetRequiredService<IMySingletonInterface>();
var singletonActor = host.Services.GetRequiredService<ActorRegistry>().Get<SingletonActor>();
var singletonFromActor =
await singletonActor.Ask<IMySingletonInterface>(SingletonActor.GetSingleton.Instance, TimeSpan.FromSeconds(3));
// assert
singletonFromActor.Should().Be(singletonInstance);
WithActors
行有一个重载,它暴露了 DependencyResolver
- 在引擎盖下使用 IServiceProvider
,您可以使用 DependencyResolver.Props<TActor>(non-DI'd arguments...)
实例化一个通过其构造函数解决依赖关系的 actor。