public void Send()
        {
            // arrange
            var result = default(string);
            var bus = new Microbus();
            bus.Register<string>(message => result = message);

            // act
            bus.Send("hello");

            // assert
            Assert.Equal("hello", result);
        }
        public void ExceptionsBubbleUp()
        {
            // arrange
            var bus = new Microbus();
            bus.Register<string>(message => { throw new Exception(); });

            // act
            bus.Send("hello");

            // assert
            ////Assert.Equal("foo", result1);
            ////Assert.Equal("bar", result2);
        }
        public void Send2Messages()
        {
            // arrange
            var result = new List<string>();
            var bus = new Microbus();
            bus.Register<string>(message => result.Add(message));

            // act
            bus.Send("foo");
            bus.Send("bar");

            // assert
            Assert.Equal("foo", result[0]);
            Assert.Equal("bar", result[1]);
        }
        public static void Main()
        {
            var connectionString     = @"Data Source=(localdb)\ProjectsV13;Initial Catalog=CarTracker;Integrated Security=True;";
            var eventStoreRepository = new dddlib.Persistence.SqlServer.SqlServerEventStoreRepository(connectionString);
            var carListRepository    = new dddlib.Projections.Memory.MemoryRepository <int, List <CarItem> >();

            var view = new CarListView(carListRepository);
            var bus  = new Microbus().AutoRegister(view);

            using (new dddlib.Persistence.EventDispatcher.SqlServer.SqlServerEventDispatcher(
                       connectionString,
                       (sequenceNumber, @event) => bus.Send(@event),
                       Guid.NewGuid()))
            {
                new Application(eventStoreRepository, carListRepository).Run();
            }
        }
        public void SendChainedConsumers()
        {
            // arrange
            var result = default(string);
            var bus = new Microbus();
            bus.Register<string>(message => bus.Send(new Message { Value = message }));
            bus.Register<Message>(message => result = message.Value);

            // act
            bus.Send("hello");

            // assert
            Assert.Equal("hello", result);
        }
        public void SendMutipleBus()
        {
            // arrange
            var result1 = default(string);
            var result2 = default(string);
            var bus1 = new Microbus();
            var bus2 = new Microbus();
            bus1.Register<string>(message => result1 = message);
            bus2.Register<string>(message => result2 = message);

            // act
            bus1.Send("foo");
            bus2.Send("bar");

            // assert
            Assert.Equal("foo", result1);
            Assert.Equal("bar", result2);
        }
        public void SendCyclic()
        {
            // arrange
            var bus = new Microbus();
            bus.Register<string>(message => bus.Send(message));

            // act
            Action action = () => bus.Send("hello");

            // assert
            try
            {
                action();
            }
            catch (Exception ex)
            {
                Assert.Contains("cyclic", ex.Message);
            }
        }