Skip to content

Commit 09cae04

Browse files
authored
Add IServerDelegationFeature to DI #40043 (#41737)
1 parent b707759 commit 09cae04

File tree

4 files changed

+34
-29
lines changed

4 files changed

+34
-29
lines changed

src/Servers/HttpSys/src/MessagePump.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
namespace Microsoft.AspNetCore.Server.HttpSys;
1515

16-
internal sealed partial class MessagePump : IServer
16+
internal sealed partial class MessagePump : IServer, IServerDelegationFeature
1717
{
1818
private readonly ILogger _logger;
1919
private readonly HttpSysOptions _options;
@@ -53,8 +53,7 @@ public MessagePump(IOptions<HttpSysOptions> options, ILoggerFactory loggerFactor
5353

5454
if (HttpApi.SupportsDelegation)
5555
{
56-
var delegationProperty = new ServerDelegationPropertyFeature(Listener.UrlGroup, _logger);
57-
Features.Set<IServerDelegationFeature>(delegationProperty);
56+
Features.Set<IServerDelegationFeature>(this);
5857
}
5958

6059
_maxAccepts = _options.MaxAccepts;
@@ -271,6 +270,13 @@ void RegisterCancelation()
271270
return _shutdownSignal.Task;
272271
}
273272

273+
public DelegationRule CreateDelegationRule(string queueName, string uri)
274+
{
275+
var rule = new DelegationRule(Listener.UrlGroup, queueName, uri, _logger);
276+
Listener.UrlGroup.SetDelegationProperty(rule.Queue);
277+
return rule;
278+
}
279+
274280
public void Dispose()
275281
{
276282
_stopping = 1;

src/Servers/HttpSys/src/ServerDelegationPropertyFeature.cs

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/Servers/HttpSys/src/WebHostBuilderHttpSysExtensions.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,12 @@ public static IWebHostBuilder UseHttpSys(this IWebHostBuilder hostBuilder)
2828
{
2929
return hostBuilder.ConfigureServices(services =>
3030
{
31-
services.AddSingleton<IServer, MessagePump>();
31+
services.AddSingleton<MessagePump>();
32+
services.AddSingleton<IServer>(services => services.GetRequiredService<MessagePump>());
33+
if (HttpApi.SupportsDelegation)
34+
{
35+
services.AddSingleton<IServerDelegationFeature>(services => services.GetRequiredService<MessagePump>());
36+
}
3237
services.AddTransient<AuthenticationHandler>();
3338
services.AddSingleton<IServerIntegratedAuth>(services =>
3439
{

src/Servers/HttpSys/test/FunctionalTests/DelegateTests.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,35 @@
33

44
using System.Net.Http;
55
using System.Runtime.InteropServices;
6+
using Microsoft.AspNetCore.Hosting;
7+
using Microsoft.AspNetCore.Hosting.Server;
68
using Microsoft.AspNetCore.Http;
79
using Microsoft.AspNetCore.HttpSys.Internal;
810
using Microsoft.AspNetCore.Testing;
11+
using Microsoft.Extensions.DependencyInjection;
12+
using Microsoft.Extensions.Hosting;
913

1014
namespace Microsoft.AspNetCore.Server.HttpSys.FunctionalTests;
1115

1216
public class DelegateTests
1317
{
1418
private static readonly string _expectedResponseString = "Hello from delegatee";
1519

20+
[ConditionalFact]
21+
[DelegateSupportedCondition(true)]
22+
public void IServerDelegationFeature_IsAvailableFromServices()
23+
{
24+
var builder = new HostBuilder();
25+
builder.ConfigureWebHost(webHost =>
26+
{
27+
webHost.UseHttpSys();
28+
});
29+
using var host = builder.Build();
30+
var server = host.Services.GetRequiredService<IServer>();
31+
var delegationFeature = host.Services.GetRequiredService<IServerDelegationFeature>();
32+
Assert.Same(server, delegationFeature);
33+
}
34+
1635
[ConditionalFact]
1736
[DelegateSupportedCondition(true)]
1837
public async Task DelegateRequestTest()

0 commit comments

Comments
 (0)