public void Test() { var down1 = new ForwardingDownHandler(); var down2 = new ForwardingDownHandler(); var up1 = new ForwardingUpHandler(); var up2 = new ForwardingUpHandler(); var handler = Substitute.For<IUpstreamHandler>(); var bp = new PipelineBuilder(); bp.RegisterDownstream(down1); bp.RegisterDownstream(down2); bp.RegisterUpstream(up1); bp.RegisterUpstream(up2); bp.RegisterUpstream(handler); var pipeline = bp.Build(); pipeline.Start(); pipeline.Send(new DispatchEvent(new FakeEvent())); foreach (var call in handler.ReceivedCalls()) { Console.WriteLine(call.GetArguments()[1]); } }
/// <summary> /// Build the pipeline /// </summary> /// <returns>Constructed pipeline</returns> public IDomainEventDispatcher Build() { if (_inner == null) throw new InvalidOperationException( "You must specify a dispatcher, either through the UseContainer() method or by the UseCustomDispatcher() method."); var builder = new PipelineBuilder(); if (_unitOfWorkAdapter != null) builder.RegisterDownstream(new TransactionalHandler(_unitOfWorkAdapter, _storage)); if (_maxWorkers > 0) builder.RegisterDownstream(new AsyncHandler(_maxWorkers)); builder.RegisterDownstream(_inner); builder.RegisterUpstream(_errorHandler); var pipeline = builder.Build(); pipeline.Start(); return new EventPipelineDispatcher(pipeline); }
/// <summary> /// Build the dispatcher. /// </summary> /// <returns>Created dispatcher</returns> public ICommandDispatcher Build() { if (_lastHandler == null && _container == null) throw new InvalidOperationException( "You must have specified a handler which can actually invoke the correct command handler. For instance the 'IocDispatcher'."); if (_container == null && _lastHandler == null) throw new InvalidOperationException( "You must have specified a SINGLE handler that can invoke the correct command handler. Either use 'IocDispatcher' or another one, not both alternatives."); var builder = new PipelineBuilder(); // must be registered before the storage since the storage listens on CommandAborted if (_maxAttempts > 0) { var handler = new RetryingHandler(_maxAttempts); builder.RegisterUpstream(handler); } // Must be registered before the async handler. if (_storageHandler != null) { builder.RegisterDownstream(_storageHandler); builder.RegisterUpstream(_storageHandler); } if (_workers > 0) builder.RegisterDownstream(new AsyncHandler(_workers)); if (_container != null) builder.RegisterDownstream(new Pipeline.IocDispatcher(_container)); else builder.RegisterDownstream(_lastHandler); builder.RegisterUpstream(_errorHandler); var pipeline = builder.Build(); pipeline.Start(); var dispatcher = new PipelineDispatcher(pipeline); return dispatcher; }