diff --git a/CHANGELOG.md b/CHANGELOG.md index c1a4ca81..96ce9aa9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 2.0.0-alpha.20 +* Inject the `MiddlewarePipeline` into requests. + # 2.0.0-alpha.19 * `parseBody` checks for null content type, and throws a `400` if none was given. * Add `ResponseContext.contentLength`. diff --git a/lib/src/core/driver.dart b/lib/src/core/driver.dart index 794ff02a..e7045aaa 100644 --- a/lib/src/core/driver.dart +++ b/lib/src/core/driver.dart @@ -97,17 +97,18 @@ abstract class Driver< var path = req.path; if (path == '/') path = ''; - Tuple3, ParseResult>> - resolveTuple() { + Tuple4, ParseResult>, + MiddlewarePipeline> resolveTuple() { Router r = app.optimizedRouter; var resolved = r.resolveAbsolute(path, method: req.method, strip: false); - - return new Tuple3( - new MiddlewarePipeline(resolved).handlers, + var pipeline = new MiddlewarePipeline(resolved); + return new Tuple4( + pipeline.handlers, resolved.fold>( {}, (out, r) => out..addAll(r.allParams)), resolved.isEmpty ? null : resolved.first.parseResult, + pipeline, ); } @@ -118,9 +119,10 @@ abstract class Driver< req.params.addAll(tuple.item2); - req.container.registerSingleton>>( - tuple.item3); - req.container.registerSingleton(tuple.item3); + req.container + ..registerSingleton(tuple.item4) + ..registerSingleton>>(tuple.item3) + ..registerSingleton(tuple.item3); if (!app.isProduction && app.logger != null) { req.container diff --git a/lib/src/core/server.dart b/lib/src/core/server.dart index 0a1ab0aa..ccf20ccb 100644 --- a/lib/src/core/server.dart +++ b/lib/src/core/server.dart @@ -36,9 +36,10 @@ class Angel extends Routable { (String view, [Map data]) => 'No view engine has been configured yet.'; final List _children = []; - final Map, ParseResult>>> - handlerCache = new HashMap(); + final Map< + String, + Tuple4, ParseResult>, + MiddlewarePipeline>> handlerCache = new HashMap(); Router _flattened; bool _isProduction; diff --git a/pubspec.yaml b/pubspec.yaml index 5055412d..743db819 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,5 +1,5 @@ name: angel_framework -version: 2.0.0-alpha.19 +version: 2.0.0-alpha.20 description: A high-powered HTTP server with dependency injection, routing and much more. author: Tobe O homepage: https://github.com/angel-dart/angel_framework