diff options
author | James Newton-King <james@newtonking.com> | 2022-11-13 07:08:20 +0300 |
---|---|---|
committer | James Newton-King <james@newtonking.com> | 2022-11-13 07:08:20 +0300 |
commit | 2803ff75e0c3695ed786f26da306aadcc409e74f (patch) | |
tree | a43602446f63e964bd930bea033a6cc47ecee0b3 | |
parent | 8e26c9c45d362eadd3fb239a1f03a1186fbdbd7a (diff) |
API review feedback
5 files changed, 65 insertions, 56 deletions
diff --git a/src/Servers/Kestrel/Kestrel/src/WebHostBuilderKestrelExtensions.cs b/src/Servers/Kestrel/Kestrel/src/WebHostBuilderKestrelExtensions.cs index cae4dd6dd1..28c356e30c 100644 --- a/src/Servers/Kestrel/Kestrel/src/WebHostBuilderKestrelExtensions.cs +++ b/src/Servers/Kestrel/Kestrel/src/WebHostBuilderKestrelExtensions.cs @@ -29,6 +29,15 @@ public static class WebHostBuilderKestrelExtensions /// </returns> public static IWebHostBuilder UseKestrel(this IWebHostBuilder hostBuilder) { + hostBuilder.ConfigureServices(services => + { + // Don't override an already-configured transport + services.TryAddSingleton<IConnectionListenerFactory, SocketTransportFactory>(); + + services.AddTransient<IConfigureOptions<KestrelServerOptions>, KestrelServerOptionsSetup>(); + services.AddSingleton<IServer, KestrelServerImpl>(); + }); + hostBuilder.UseQuic(options => { // Configure server defaults to match client defaults. @@ -37,16 +46,9 @@ public static class WebHostBuilderKestrelExtensions options.DefaultCloseErrorCode = (long)Http3ErrorCode.NoError; }); - return hostBuilder.ConfigureServices(services => - { - // Don't override an already-configured transport - services.TryAddSingleton<IConnectionListenerFactory, SocketTransportFactory>(); + hostBuilder.UseNamedPipes(); - services.AddNamedPipes(); - - services.AddTransient<IConfigureOptions<KestrelServerOptions>, KestrelServerOptionsSetup>(); - services.AddSingleton<IServer, KestrelServerImpl>(); - }); + return hostBuilder; } /// <summary> diff --git a/src/Servers/Kestrel/Transport.NamedPipes/src/PublicAPI.Unshipped.txt b/src/Servers/Kestrel/Transport.NamedPipes/src/PublicAPI.Unshipped.txt index 2ac2f8bb1c..74e0993c7a 100644 --- a/src/Servers/Kestrel/Transport.NamedPipes/src/PublicAPI.Unshipped.txt +++ b/src/Servers/Kestrel/Transport.NamedPipes/src/PublicAPI.Unshipped.txt @@ -1,4 +1,5 @@ #nullable enable +Microsoft.AspNetCore.Hosting.WebHostBuilderNamedPipeExtensions Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.NamedPipeTransportOptions Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.NamedPipeTransportOptions.CurrentUserOnly.get -> bool Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.NamedPipeTransportOptions.CurrentUserOnly.set -> void @@ -9,6 +10,5 @@ Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.NamedPipeTransportOptio Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.NamedPipeTransportOptions.NamedPipeTransportOptions() -> void Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.NamedPipeTransportOptions.PipeSecurity.get -> System.IO.Pipes.PipeSecurity? Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.NamedPipeTransportOptions.PipeSecurity.set -> void -Microsoft.Extensions.DependencyInjection.ServiceCollectionNamedPipeExtensions -static Microsoft.Extensions.DependencyInjection.ServiceCollectionNamedPipeExtensions.AddNamedPipes(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! -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! +static Microsoft.AspNetCore.Hosting.WebHostBuilderNamedPipeExtensions.UseNamedPipes(this Microsoft.AspNetCore.Hosting.IWebHostBuilder! hostBuilder) -> Microsoft.AspNetCore.Hosting.IWebHostBuilder! +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! diff --git a/src/Servers/Kestrel/Transport.NamedPipes/src/ServiceCollectionNamedPipeExtensions.cs b/src/Servers/Kestrel/Transport.NamedPipes/src/ServiceCollectionNamedPipeExtensions.cs deleted file mode 100644 index a300b60bfe..0000000000 --- a/src/Servers/Kestrel/Transport.NamedPipes/src/ServiceCollectionNamedPipeExtensions.cs +++ /dev/null @@ -1,36 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using Microsoft.AspNetCore.Connections; -using Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes; -using Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.Internal; - -namespace Microsoft.Extensions.DependencyInjection; - -/// <summary> -/// <see cref="IServiceCollection" /> extension methods to configure the Named Pipes transport to be used by Kestrel. -/// </summary> -public static class ServiceCollectionNamedPipeExtensions -{ - /// <summary> - /// Specify Named Pipes as the transport to be used by Kestrel. - /// </summary> - /// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param> - /// <returns>The service collection.</returns> - public static IServiceCollection AddNamedPipes(this IServiceCollection services) - { - services.AddSingleton<IConnectionListenerFactory, NamedPipeTransportFactory>(); - return services; - } - - /// <summary> - /// Specify Named Pipes as the transport to be used by Kestrel. - /// </summary> - /// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param> - /// <param name="configureOptions">A callback to configure transport options.</param> - /// <returns>The service collection.</returns> - public static IServiceCollection AddNamedPipes(this IServiceCollection services, Action<NamedPipeTransportOptions> configureOptions) - { - return services.AddNamedPipes().Configure(configureOptions); - } -} diff --git a/src/Servers/Kestrel/Transport.NamedPipes/src/WebHostBuilderNamedPipeExtensions.cs b/src/Servers/Kestrel/Transport.NamedPipes/src/WebHostBuilderNamedPipeExtensions.cs new file mode 100644 index 0000000000..40918a2ec2 --- /dev/null +++ b/src/Servers/Kestrel/Transport.NamedPipes/src/WebHostBuilderNamedPipeExtensions.cs @@ -0,0 +1,43 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.AspNetCore.Connections; +using Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes; +using Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.Internal; +using Microsoft.Extensions.DependencyInjection; + +namespace Microsoft.AspNetCore.Hosting; + +/// <summary> +/// <see cref="IWebHostBuilder" /> extension methods to configure the Named Pipes transport to be used by Kestrel. +/// </summary> +public static class WebHostBuilderNamedPipeExtensions +{ + /// <summary> + /// Specify Named Pipes as the transport to be used by Kestrel. + /// </summary> + /// <param name="hostBuilder">The <see cref="IWebHostBuilder"/> to configure.</param> + /// <returns>The <see cref="IWebHostBuilder"/>.</returns> + public static IWebHostBuilder UseNamedPipes(this IWebHostBuilder hostBuilder) + { + hostBuilder.ConfigureServices(services => + { + services.AddSingleton<IConnectionListenerFactory, NamedPipeTransportFactory>(); + }); + return hostBuilder; + } + + /// <summary> + /// Specify Named Pipes as the transport to be used by Kestrel. + /// </summary> + /// <param name="hostBuilder">The <see cref="IWebHostBuilder"/> to configure.</param> + /// <param name="configureOptions">A callback to configure transport options.</param> + /// <returns>The <see cref="IWebHostBuilder"/>.</returns> + public static IWebHostBuilder UseNamedPipes(this IWebHostBuilder hostBuilder, Action<NamedPipeTransportOptions> configureOptions) + { + return hostBuilder.UseNamedPipes().ConfigureServices(services => + { + services.Configure(configureOptions); + }); + } +} diff --git a/src/Servers/Kestrel/Transport.NamedPipes/test/WebHostTests.cs b/src/Servers/Kestrel/Transport.NamedPipes/test/WebHostTests.cs index 54fe381332..c4ee759c79 100644 --- a/src/Servers/Kestrel/Transport.NamedPipes/test/WebHostTests.cs +++ b/src/Servers/Kestrel/Transport.NamedPipes/test/WebHostTests.cs @@ -94,6 +94,14 @@ public class WebHostTests : LoggedTest listenOptions.Protocols = HttpProtocols.Http1; }); }) + .UseNamedPipes(options => + { + var ps = new PipeSecurity(); + ps.AddAccessRule(new PipeAccessRule("Users", PipeAccessRights.ReadWrite | PipeAccessRights.CreateNewInstance, AccessControlType.Allow)); + + options.PipeSecurity = ps; + options.CurrentUserOnly = false; + }) .Configure(app => { app.Run(async context => @@ -119,14 +127,6 @@ public class WebHostTests : LoggedTest .ConfigureServices(services => { AddTestLogging(services); - services.AddNamedPipes(options => - { - var ps = new PipeSecurity(); - ps.AddAccessRule(new PipeAccessRule("Users", PipeAccessRights.ReadWrite | PipeAccessRights.CreateNewInstance, AccessControlType.Allow)); - - options.PipeSecurity = ps; - options.CurrentUserOnly = false; - }); }); using (var host = builder.Build()) |