Skip to content

Commit 2803ff7

Browse files
committed
API review feedback
1 parent 8e26c9c commit 2803ff7

File tree

5 files changed

+65
-56
lines changed

5 files changed

+65
-56
lines changed

src/Servers/Kestrel/Kestrel/src/WebHostBuilderKestrelExtensions.cs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,15 @@ public static class WebHostBuilderKestrelExtensions
2929
/// </returns>
3030
public static IWebHostBuilder UseKestrel(this IWebHostBuilder hostBuilder)
3131
{
32+
hostBuilder.ConfigureServices(services =>
33+
{
34+
// Don't override an already-configured transport
35+
services.TryAddSingleton<IConnectionListenerFactory, SocketTransportFactory>();
36+
37+
services.AddTransient<IConfigureOptions<KestrelServerOptions>, KestrelServerOptionsSetup>();
38+
services.AddSingleton<IServer, KestrelServerImpl>();
39+
});
40+
3241
hostBuilder.UseQuic(options =>
3342
{
3443
// Configure server defaults to match client defaults.
@@ -37,16 +46,9 @@ public static IWebHostBuilder UseKestrel(this IWebHostBuilder hostBuilder)
3746
options.DefaultCloseErrorCode = (long)Http3ErrorCode.NoError;
3847
});
3948

40-
return hostBuilder.ConfigureServices(services =>
41-
{
42-
// Don't override an already-configured transport
43-
services.TryAddSingleton<IConnectionListenerFactory, SocketTransportFactory>();
49+
hostBuilder.UseNamedPipes();
4450

45-
services.AddNamedPipes();
46-
47-
services.AddTransient<IConfigureOptions<KestrelServerOptions>, KestrelServerOptionsSetup>();
48-
services.AddSingleton<IServer, KestrelServerImpl>();
49-
});
51+
return hostBuilder;
5052
}
5153

5254
/// <summary>
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#nullable enable
2+
Microsoft.AspNetCore.Hosting.WebHostBuilderNamedPipeExtensions
23
Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.NamedPipeTransportOptions
34
Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.NamedPipeTransportOptions.CurrentUserOnly.get -> bool
45
Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.NamedPipeTransportOptions.CurrentUserOnly.set -> void
@@ -9,6 +10,5 @@ Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.NamedPipeTransportOptio
910
Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.NamedPipeTransportOptions.NamedPipeTransportOptions() -> void
1011
Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.NamedPipeTransportOptions.PipeSecurity.get -> System.IO.Pipes.PipeSecurity?
1112
Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.NamedPipeTransportOptions.PipeSecurity.set -> void
12-
Microsoft.Extensions.DependencyInjection.ServiceCollectionNamedPipeExtensions
13-
static Microsoft.Extensions.DependencyInjection.ServiceCollectionNamedPipeExtensions.AddNamedPipes(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
14-
static Microsoft.Extensions.DependencyInjection.ServiceCollectionNamedPipeExtensions.AddNamedPipes(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action<Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.NamedPipeTransportOptions!>! configureOptions) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
13+
static Microsoft.AspNetCore.Hosting.WebHostBuilderNamedPipeExtensions.UseNamedPipes(this Microsoft.AspNetCore.Hosting.IWebHostBuilder! hostBuilder) -> Microsoft.AspNetCore.Hosting.IWebHostBuilder!
14+
static Microsoft.AspNetCore.Hosting.WebHostBuilderNamedPipeExtensions.UseNamedPipes(this Microsoft.AspNetCore.Hosting.IWebHostBuilder! hostBuilder, System.Action<Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.NamedPipeTransportOptions!>! configureOptions) -> Microsoft.AspNetCore.Hosting.IWebHostBuilder!

src/Servers/Kestrel/Transport.NamedPipes/src/ServiceCollectionNamedPipeExtensions.cs

Lines changed: 0 additions & 36 deletions
This file was deleted.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
using Microsoft.AspNetCore.Connections;
5+
using Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes;
6+
using Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.Internal;
7+
using Microsoft.Extensions.DependencyInjection;
8+
9+
namespace Microsoft.AspNetCore.Hosting;
10+
11+
/// <summary>
12+
/// <see cref="IWebHostBuilder" /> extension methods to configure the Named Pipes transport to be used by Kestrel.
13+
/// </summary>
14+
public static class WebHostBuilderNamedPipeExtensions
15+
{
16+
/// <summary>
17+
/// Specify Named Pipes as the transport to be used by Kestrel.
18+
/// </summary>
19+
/// <param name="hostBuilder">The <see cref="IWebHostBuilder"/> to configure.</param>
20+
/// <returns>The <see cref="IWebHostBuilder"/>.</returns>
21+
public static IWebHostBuilder UseNamedPipes(this IWebHostBuilder hostBuilder)
22+
{
23+
hostBuilder.ConfigureServices(services =>
24+
{
25+
services.AddSingleton<IConnectionListenerFactory, NamedPipeTransportFactory>();
26+
});
27+
return hostBuilder;
28+
}
29+
30+
/// <summary>
31+
/// Specify Named Pipes as the transport to be used by Kestrel.
32+
/// </summary>
33+
/// <param name="hostBuilder">The <see cref="IWebHostBuilder"/> to configure.</param>
34+
/// <param name="configureOptions">A callback to configure transport options.</param>
35+
/// <returns>The <see cref="IWebHostBuilder"/>.</returns>
36+
public static IWebHostBuilder UseNamedPipes(this IWebHostBuilder hostBuilder, Action<NamedPipeTransportOptions> configureOptions)
37+
{
38+
return hostBuilder.UseNamedPipes().ConfigureServices(services =>
39+
{
40+
services.Configure(configureOptions);
41+
});
42+
}
43+
}

src/Servers/Kestrel/Transport.NamedPipes/test/WebHostTests.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,14 @@ public async Task ListenNamedPipeEndpoint_Impersonation_ClientSuccess()
9494
listenOptions.Protocols = HttpProtocols.Http1;
9595
});
9696
})
97+
.UseNamedPipes(options =>
98+
{
99+
var ps = new PipeSecurity();
100+
ps.AddAccessRule(new PipeAccessRule("Users", PipeAccessRights.ReadWrite | PipeAccessRights.CreateNewInstance, AccessControlType.Allow));
101+
102+
options.PipeSecurity = ps;
103+
options.CurrentUserOnly = false;
104+
})
97105
.Configure(app =>
98106
{
99107
app.Run(async context =>
@@ -119,14 +127,6 @@ public async Task ListenNamedPipeEndpoint_Impersonation_ClientSuccess()
119127
.ConfigureServices(services =>
120128
{
121129
AddTestLogging(services);
122-
services.AddNamedPipes(options =>
123-
{
124-
var ps = new PipeSecurity();
125-
ps.AddAccessRule(new PipeAccessRule("Users", PipeAccessRights.ReadWrite | PipeAccessRights.CreateNewInstance, AccessControlType.Allow));
126-
127-
options.PipeSecurity = ps;
128-
options.CurrentUserOnly = false;
129-
});
130130
});
131131

132132
using (var host = builder.Build())

0 commit comments

Comments
 (0)