Beispiel #1
0
    public async Task PublishAsync_Mediatorが実行される()
    {
        var services = new ServiceCollection();
        services.AddMediatR(typeof(ServicePing).Assembly);

        services.AddSingleton<TaskHolder>();
        var provider = services.BuildServiceProvider();

        var serviceFactory = provider.GetService<ServiceFactory>();
        var registry = new ListenerRegistry();
        registry.Add(typeof(MediatorClientTestPang));

        var client = new DefaultMediatorClient(new ServiceRegistry(), registry,
            serviceFactory!, new InternalScopedServiceFactoryFactory(serviceFactory!), new TestLogger());

        var holder = provider.GetService<TaskHolder>();

        var pang = new MediatorClientTestPang();
        await client.PublishAsync(nameof(MediatorClientTestPang), pang);

        Thread.Sleep(1000); //それぞれで10だけまたしているため、1000あれば終わっているはず。

        await Task.WhenAll(holder.Tasks);
        holder.Messages.Should().HaveCount(3).And.Contain("1", "2", "3");
        holder.Pangs.Should().HaveCount(3);

        var paramBang = holder.Pangs[0];
        foreach (var bangItem in holder.Pangs)
        {
            paramBang.Should().Be(bangItem);
        }
    }
Beispiel #2
0
 public Task Handle(MediatorClientTestPang notification, CancellationToken cancellationToken)
 {
     holder.Pangs.Add(notification);
     task.Start();
     return Task.CompletedTask;
 }