9
9
using Microsoft . AspNet . Http . Features ;
10
10
using Microsoft . AspNet . Http . Internal ;
11
11
using Microsoft . AspNet . Owin ;
12
+ using Microsoft . Extensions . DependencyInjection ;
12
13
13
14
namespace Microsoft . AspNet . Builder
14
15
{
@@ -65,23 +66,29 @@ public static IApplicationBuilder UseOwin(this IApplicationBuilder builder, Acti
65
66
return builder ;
66
67
}
67
68
68
- public static IApplicationBuilder UseBuilder ( this AddMiddleware app )
69
+ public static IApplicationBuilder UseBuilder ( this AddMiddleware app , Action < IServiceCollection > configureServices = null )
69
70
{
70
71
// Adapt WebSockets by default.
71
72
app ( OwinWebSocketAcceptAdapter . AdaptWebSockets ) ;
72
- var builder = new ApplicationBuilder ( serviceProvider : null ) ;
73
+ IServiceCollection services = null ;
74
+ if ( configureServices != null )
75
+ {
76
+ services = new ServiceCollection ( ) ;
77
+ configureServices ( services ) ;
78
+ }
79
+ var builder = new ApplicationBuilder ( serviceProvider : services ? . BuildServiceProvider ( ) ) ;
73
80
74
81
CreateMiddleware middleware = CreateMiddlewareFactory ( exit =>
75
82
{
76
83
builder . Use ( ignored => exit ) ;
77
84
return builder . Build ( ) ;
78
- } ) ;
85
+ } , builder . ApplicationServices ) ;
79
86
80
87
app ( middleware ) ;
81
88
return builder ;
82
89
}
83
90
84
- private static CreateMiddleware CreateMiddlewareFactory ( Func < RequestDelegate , RequestDelegate > middleware )
91
+ private static CreateMiddleware CreateMiddlewareFactory ( Func < RequestDelegate , RequestDelegate > middleware , IServiceProvider applicationServices )
85
92
{
86
93
return next =>
87
94
{
@@ -105,16 +112,17 @@ private static CreateMiddleware CreateMiddlewareFactory(Func<RequestDelegate, Re
105
112
context = new DefaultHttpContext (
106
113
new FeatureCollection (
107
114
new OwinFeatureCollection ( env ) ) ) ;
115
+ context . ApplicationServices = applicationServices ;
108
116
}
109
-
117
+
110
118
return app . Invoke ( context ) ;
111
119
} ;
112
120
} ;
113
121
}
114
122
115
- public static AddMiddleware UseBuilder ( this AddMiddleware app , Action < IApplicationBuilder > pipeline )
123
+ public static AddMiddleware UseBuilder ( this AddMiddleware app , Action < IApplicationBuilder > pipeline , Action < IServiceCollection > configureServices = null )
116
124
{
117
- var builder = app . UseBuilder ( ) ;
125
+ var builder = app . UseBuilder ( configureServices ) ;
118
126
pipeline ( builder ) ;
119
127
return app ;
120
128
}
0 commit comments