コード例 #1
0
        public static IDictionary <Type, object> GetDefaultServices()
        {
            var services = new Dictionary <Type, object>();

            var commandBus = new MemoryCommandBus();
            var eventBus   = new MemoryEventBus();

            Func <IRepository>     ormFactory     = () => new OrmRepository(eventBus);
            Func <ISagaRepository> sagaOrmFactory = () => new OrmSagaRepository(commandBus);
            Func <IViewRepository> viewOrmFactory = () => new OrmViewRepository();

            // Handlers
            var registrationSaga = new RegistrationProcessSagaRouter(sagaOrmFactory);

            commandBus.Register(registrationSaga);
            eventBus.Register(registrationSaga);

            commandBus.Register(new OrderCommandHandler(ormFactory));

            commandBus.Register(new SeatsAvailabilityHandler(ormFactory));

            services[typeof(ICommandBus)]            = commandBus;
            services[typeof(IEventBus)]              = eventBus;
            services[typeof(Func <IRepository>)]     = ormFactory;
            services[typeof(Func <ISagaRepository>)] = sagaOrmFactory;
            services[typeof(Func <IViewRepository>)] = viewOrmFactory;

            return(services);
        }
コード例 #2
0
        public void when_order_placed_then_routes_and_saves()
        {
            var repo       = new Mock <ISagaRepository>();
            var disposable = repo.As <IDisposable>();
            var router     = new RegistrationProcessSagaRouter(() => repo.Object);

            router.Handle(new Events.OrderPlaced());

            repo.Verify(x => x.Save(It.IsAny <RegistrationProcessSaga>()));
            disposable.Verify(x => x.Dispose());
        }
コード例 #3
0
        public void when_reservation_rejected_then_routes_and_saves()
        {
            var saga = new RegistrationProcessSaga
            {
                State         = RegistrationProcessSaga.SagaState.AwaitingReservationConfirmation,
                ReservationId = Guid.NewGuid(),
            };
            var repo = new Mock <ISagaRepository>();

            repo.Setup(x => x.Query <RegistrationProcessSaga>()).Returns(new[] { saga }.AsQueryable());
            var disposable = repo.As <IDisposable>();
            var router     = new RegistrationProcessSagaRouter(() => repo.Object);

            router.Handle(new Events.ReservationRejected {
                ReservationId = saga.ReservationId
            });

            repo.Verify(x => x.Save(It.IsAny <RegistrationProcessSaga>()));
            disposable.Verify(x => x.Dispose());
        }