Skip to content
This repository was archived by the owner on Nov 20, 2018. It is now read-only.

Commit a2a796b

Browse files
committed
Adding option to configure services when exposing the ASP.NET 5 pipeline via OWIN #398
1 parent 308dd10 commit a2a796b

File tree

3 files changed

+65
-8
lines changed

3 files changed

+65
-8
lines changed

src/Microsoft.AspNet.Owin/OwinExtensions.cs

+15-7
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using Microsoft.AspNet.Http.Features;
1010
using Microsoft.AspNet.Http.Internal;
1111
using Microsoft.AspNet.Owin;
12+
using Microsoft.Extensions.DependencyInjection;
1213

1314
namespace Microsoft.AspNet.Builder
1415
{
@@ -65,23 +66,29 @@ public static IApplicationBuilder UseOwin(this IApplicationBuilder builder, Acti
6566
return builder;
6667
}
6768

68-
public static IApplicationBuilder UseBuilder(this AddMiddleware app)
69+
public static IApplicationBuilder UseBuilder(this AddMiddleware app, Action<IServiceCollection> configureServices = null)
6970
{
7071
// Adapt WebSockets by default.
7172
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());
7380

7481
CreateMiddleware middleware = CreateMiddlewareFactory(exit =>
7582
{
7683
builder.Use(ignored => exit);
7784
return builder.Build();
78-
});
85+
}, builder.ApplicationServices);
7986

8087
app(middleware);
8188
return builder;
8289
}
8390

84-
private static CreateMiddleware CreateMiddlewareFactory(Func<RequestDelegate, RequestDelegate> middleware)
91+
private static CreateMiddleware CreateMiddlewareFactory(Func<RequestDelegate, RequestDelegate> middleware, IServiceProvider applicationServices)
8592
{
8693
return next =>
8794
{
@@ -105,16 +112,17 @@ private static CreateMiddleware CreateMiddlewareFactory(Func<RequestDelegate, Re
105112
context = new DefaultHttpContext(
106113
new FeatureCollection(
107114
new OwinFeatureCollection(env)));
115+
context.ApplicationServices = applicationServices;
108116
}
109-
117+
110118
return app.Invoke(context);
111119
};
112120
};
113121
}
114122

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)
116124
{
117-
var builder = app.UseBuilder();
125+
var builder = app.UseBuilder(configureServices);
118126
pipeline(builder);
119127
return app;
120128
}

src/Microsoft.AspNet.Owin/project.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
"keyFile": "../../tools/Key.snk"
1111
},
1212
"dependencies": {
13-
"Microsoft.AspNet.Http": "1.0.0-*"
13+
"Microsoft.AspNet.Http": "1.0.0-*",
14+
"Microsoft.Extensions.DependencyInjection": "1.0.0-*"
1415
},
1516
"frameworks": {
1617
"net451": {},
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using System;
5+
using System.Collections.Generic;
6+
using System.Threading.Tasks;
7+
using Microsoft.AspNet.Builder;
8+
using Microsoft.Extensions.DependencyInjection;
9+
using Xunit;
10+
11+
12+
namespace Microsoft.AspNet.Owin
13+
{
14+
using CreateMiddleware = Func<
15+
Func<IDictionary<string, object>, Task>,
16+
Func<IDictionary<string, object>, Task>
17+
>;
18+
using AddMiddleware = Action<Func<
19+
Func<IDictionary<string, object>, Task>,
20+
Func<IDictionary<string, object>, Task>
21+
>>;
22+
23+
public class OwinExtensionTests
24+
{
25+
[Fact]
26+
public void OwinConfigureServicesAddsServices()
27+
{
28+
AddMiddleware build = new List<CreateMiddleware>().Add;
29+
IServiceProvider serviceProvider = null;
30+
31+
var builder = build.UseBuilder(applicationBuilder =>
32+
{
33+
serviceProvider = applicationBuilder.ApplicationServices;
34+
}
35+
, serviceCollection =>
36+
{
37+
serviceCollection.AddInstance(new FakeService());
38+
});
39+
40+
Assert.NotNull(serviceProvider);
41+
}
42+
43+
public class FakeService
44+
{
45+
46+
}
47+
}
48+
}

0 commit comments

Comments
 (0)