示例#1
0
        public IHandlerScope CreateScope()
        {
            if (_scopeFactory == null)
            {
                var provider = _serviceProviderAccessor();
                if (provider == null)
                {
                    throw new InvalidOperationException("container have not been setup properly yet.");
                }
                _scopeFactory = new MicrosoftHandlerScopeFactory(provider);
            }

            return(_scopeFactory.CreateScope());
        }
        public async Task Should_be_able_To_query_and_get_a_result()
        {
            var serviceProvider = new ServiceCollection()
                                  .AddScoped <IQueryHandler <FindUser, FindUserResult>, FindUserHandler>()
                                  .BuildServiceProvider();
            var            scopeFactory = new MicrosoftHandlerScopeFactory(serviceProvider);
            FindUserResult actual;

            using (var scope = scopeFactory.CreateScope())
            {
                var invoker = new MessageInvoker(scope);
                var bus     = new ScopedQueryBus(invoker);
                actual = await bus.QueryAsync(new FindUser());
            }

            actual.Should().NotBeNull();
        }
示例#3
0
        public async Task Should_be_able_to_handle_a_message_flow()
        {
            ManualResetEvent evt = new ManualResetEvent(false);
            var upgrade          = new LogAdminUpgrades(evt);
            var serviceProvider  = new ServiceCollection()
                                   .AddScoped <IMessageHandler <ActivateUser>, ActivateUserHandler>()
                                   .AddScoped <IMessageHandler <UserActivated>, UpgradeToAdminHandler>()
                                   .AddSingleton <IMessageHandler <UserBecameAdmin> >(upgrade)
                                   .AddScoped <IQueryHandler <FindUser, FindUserResult>, FindUserHandler>()
                                   .BuildServiceProvider();
            var scopeFactory  = new MicrosoftHandlerScopeFactory(serviceProvider);
            var inboundQueue  = _fixture.OpenQueue("inbound", false);
            var outboundQueue = _fixture.OpenQueue("outbound", false);
            var token         = new CancellationTokenSource();

            using (var session = inboundQueue.BeginSession())
            {
                await session.EnqueueAsync(new Message(new ActivateUser()));

                await session.SaveChanges();
            }
            var listener1 = new QueueListener(inboundQueue, outboundQueue, scopeFactory);

            listener1.MessageInvokerFactory = scope => new MessageInvoker(scope);
            listener1.Logger = (level, queue, msg) => Console.WriteLine($"{level} {queue} {msg}");
            var listener2 = new QueueListener(outboundQueue, outboundQueue, scopeFactory);

            listener2.MessageInvokerFactory = scope => new MessageInvoker(scope);
            listener2.Logger = (level, queue, msg) => Console.WriteLine($"{level} {queue} {msg}");

            var t1 = listener1.RunAsync(token.Token);
            var t2 = listener2.RunAsync(token.Token);


            token.Cancel();
            await Task.WhenAll(t1, t2);

            evt.WaitOne(500).Should().BeTrue();
        }