Пример #1
0
        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);
        }
Пример #2
0
 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);
     });
 }
Пример #3
0
 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);
     }));
 }