public IMiddlewarePipeline Build() { var middleware = new List <IMiddleware>(); IMiddleware previous = null; foreach (var registration in _registrations.ToArray()) { var current = registration.Activator(); middleware.Add(current); if (previous != null) { previous.SetNext(current.Invoke); } previous = current; } var pipelineTermination = new PipelineTerminationMiddleware(); middleware.Add(pipelineTermination); if (previous != null) { previous.SetNext(pipelineTermination.Invoke); } return(new MiddlewarePipeline(middleware.First())); }