public PipelineRunBuilder( [NotNull] BusSettings busSettings, [NotNull] IPipelineBuilder pipelineBuilder, [NotNull] IOuterPipelineDetertorUpdater updater, [NotNull] IDependencyScope dependencyScope) { if (pipelineBuilder == null) { throw new ArgumentNullException(nameof(pipelineBuilder)); } if (updater == null) { throw new ArgumentNullException(nameof(updater)); } if (dependencyScope == null) { throw new ArgumentNullException(nameof(dependencyScope)); } if (busSettings == null) { throw new ArgumentNullException(nameof(busSettings)); } this.pipelineBuilder = pipelineBuilder; this.updater = updater; this.dependencyScope = dependencyScope; this.busSettings = busSettings; }
private static Func<IMessage, Task<object>> GenerateNext( BusSettings busSettings, IDependencyScope dependencyScope, IReadOnlyCollection<Type> pipelineHandlerTypes, IEnumerable<Type> leftHandlerTypes ) { return (async message => { if (message == null) { throw new NullMessageTypeException(); } if (!pipelineHandlerTypes.Any()) { return await RunLeafHandlers(busSettings, dependencyScope, leftHandlerTypes, message); } var head = pipelineHandlerTypes.First(); var nextHandler = (IPipelineHandler)dependencyScope.GetService(head); var tail = pipelineHandlerTypes.Skip(1).ToList(); var nextFunction = GenerateNext(busSettings, dependencyScope, tail, leftHandlerTypes); return await nextHandler.Handle(nextFunction, message); }); }
public PipelineRunBuilder( BusSettings busSettings, IPipelineBuilder pipelineBuilder, IOuterPipelineDetertorUpdater updater, IDependencyScope dependencyScope) { this.pipelineBuilder = pipelineBuilder ?? throw new ArgumentNullException(nameof(pipelineBuilder)); this.updater = updater ?? throw new ArgumentNullException(nameof(updater)); this.dependencyScope = dependencyScope ?? throw new ArgumentNullException(nameof(dependencyScope)); this.busSettings = busSettings ?? throw new ArgumentNullException(nameof(busSettings)); }
public PipelineBuilder( [NotNull]BusSettings busSettings, [NotNull]IHandlerProvider handlerProvider, [NotNull]IGlobalPipelineProvider globalPipelineProvider, [NotNull]IGlobalPipelineTracker tracker, [NotNull]IDependencyScope dependencyScope) { if (handlerProvider == null) throw new ArgumentNullException(nameof(handlerProvider)); if (globalPipelineProvider == null) throw new ArgumentNullException(nameof(globalPipelineProvider)); if (tracker == null) throw new ArgumentNullException(nameof(tracker)); if (dependencyScope == null) throw new ArgumentNullException(nameof(dependencyScope)); if (busSettings == null) throw new ArgumentNullException(nameof(busSettings)); this.handlerProvider = handlerProvider; this.globalPipelineProvider = globalPipelineProvider; this.tracker = tracker; this.dependencyScope = dependencyScope; this.busSettings = busSettings; }
private static async Task<Result> RunLeafHandlers( BusSettings busSettings, IDependencyScope dependencyScope, IEnumerable<Type> leftHandlerTypes, IMessage message) { Task lastTask = null; var handlers = leftHandlerTypes.Select(dependencyScope.GetService); if (busSettings.DisableParallelHandlers) { foreach (var leafHandler in handlers) { await (lastTask = CallHandleOnHandler(leafHandler, message)); } } else { await Task.WhenAll(handlers.Select(handler => (lastTask = CallHandleOnHandler(handler, message)))); } if (lastTask == null) { throw new NullReferenceException("Sanity Check fail: while running leaf handlers the last task was null, but an instance was expected."); } return GetTaskResult(lastTask); }