public async Task Actor_UsesCustomActivator() { var activator = new TestActivator(); var actorType = typeof(MyActor); var options = new ActorRuntimeOptions(); options.Actors.RegisterActor <MyActor>(options => { options.Activator = activator; }); var runtime = new ActorRuntime(options, loggerFactory, activatorFactory, proxyFactory); Assert.Contains(actorType.Name, runtime.RegisteredActors.Select(a => a.Type.ActorTypeName), StringComparer.InvariantCulture); var output = new MemoryStream(); await runtime.DispatchWithoutRemotingAsync(actorType.Name, "abc", nameof(MyActor.MyMethod), new MemoryStream(), output); var text = Encoding.UTF8.GetString(output.ToArray()); Assert.Equal("\"hi\"", text); await runtime.DeactivateAsync(actorType.Name, "abc"); Assert.Equal(1, activator.CreateCallCount); Assert.Equal(1, activator.DeleteCallCount); }
public static void AddActorDeactivationRoute(this IRouteBuilder routeBuilder) { routeBuilder.MapDelete("actors/{actorTypeName}/{actorId}", async context => { var routeValues = context.Request.RouteValues; var actorTypeName = (string)routeValues["actorTypeName"]; var actorId = (string)routeValues["actorId"]; await ActorRuntime.DeactivateAsync(actorTypeName, actorId); }); }
public static IEndpointConventionBuilder AddActorDeactivationRoute(this IEndpointRouteBuilder endpoints) { return(endpoints.MapDelete("actors/{actorTypeName}/{actorId}", async context => { var routeValues = context.Request.RouteValues; var actorTypeName = (string)routeValues["actorTypeName"]; var actorId = (string)routeValues["actorId"]; await ActorRuntime.DeactivateAsync(actorTypeName, actorId); })); }