Akka.Hosting - Actor 参数中的依赖注入

问题描述 投票:0回答:1

如何使用 Akka.Hosting 为 Actors 注入参数? 即 public ExampleActor(Service1 service){ _service = service; ....}

Service1是在启动时添加到IServiceCollection中的Service。

akka.net
1个回答
0
投票

您可以通过以下语法将 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。

© www.soinside.com 2019 - 2024. All rights reserved.