parent
9f52639909
commit
f990751f54
|
|
@ -75,8 +75,6 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
options.HostingStartupExceptions = _hostingStartupErrors;
|
options.HostingStartupExceptions = _hostingStartupErrors;
|
||||||
});
|
});
|
||||||
|
|
||||||
services.AddHostedService<GenericWebHostService>();
|
|
||||||
|
|
||||||
// REVIEW: This is bad since we don't own this type. Anybody could add one of these and it would mess things up
|
// REVIEW: This is bad since we don't own this type. Anybody could add one of these and it would mess things up
|
||||||
// We need to flow this differently
|
// We need to flow this differently
|
||||||
var listener = new DiagnosticListener("Microsoft.AspNetCore");
|
var listener = new DiagnosticListener("Microsoft.AspNetCore");
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
namespace Microsoft.Extensions.Hosting
|
namespace Microsoft.Extensions.Hosting
|
||||||
{
|
{
|
||||||
|
|
@ -9,6 +10,7 @@ namespace Microsoft.Extensions.Hosting
|
||||||
{
|
{
|
||||||
var webhostBuilder = new GenericWebHostBuilder(builder);
|
var webhostBuilder = new GenericWebHostBuilder(builder);
|
||||||
configure(webhostBuilder);
|
configure(webhostBuilder);
|
||||||
|
builder.ConfigureServices((context, services) => services.AddHostedService<GenericWebHostService>());
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ namespace Microsoft.AspNetCore.Hosting.Tests.Fakes
|
||||||
// This is the only one that doesn't pass through
|
// This is the only one that doesn't pass through
|
||||||
public IWebHost Build()
|
public IWebHost Build()
|
||||||
{
|
{
|
||||||
|
_hostBuilder.ConfigureServices((context, services) => services.AddHostedService<GenericWebHostService>());
|
||||||
return new GenericWebHost(_hostBuilder.Build());
|
return new GenericWebHost(_hostBuilder.Build());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1271,6 +1271,80 @@ namespace Microsoft.AspNetCore.Hosting
|
||||||
Assert.True(service.StopCalled);
|
Assert.True(service.StopCalled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[MemberData(nameof(DefaultWebHostBuilders))]
|
||||||
|
public async Task HostedServicesStartedBeforeServer(IWebHostBuilder builder)
|
||||||
|
{
|
||||||
|
builder.Configure(app => { })
|
||||||
|
.ConfigureServices(services =>
|
||||||
|
{
|
||||||
|
services.AddSingleton<StartOrder>();
|
||||||
|
services.AddHostedService<MustBeStartedFirst>();
|
||||||
|
services.AddSingleton<IServer, ServerMustBeStartedSecond>();
|
||||||
|
});
|
||||||
|
|
||||||
|
using var host = builder.Build();
|
||||||
|
await host.StartAsync();
|
||||||
|
var ordering = host.Services.GetRequiredService<StartOrder>();
|
||||||
|
Assert.Equal(2, ordering.Order);
|
||||||
|
await host.StopAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
private class StartOrder
|
||||||
|
{
|
||||||
|
public int Order { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
private class MustBeStartedFirst : IHostedService
|
||||||
|
{
|
||||||
|
public MustBeStartedFirst(StartOrder ordering)
|
||||||
|
{
|
||||||
|
Ordering = ordering;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StartOrder Ordering { get; }
|
||||||
|
|
||||||
|
public Task StartAsync(CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
Assert.Equal(0, Ordering.Order);
|
||||||
|
Ordering.Order++;
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task StopAsync(CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class ServerMustBeStartedSecond : IServer
|
||||||
|
{
|
||||||
|
public ServerMustBeStartedSecond(StartOrder ordering)
|
||||||
|
{
|
||||||
|
Ordering = ordering;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StartOrder Ordering { get; }
|
||||||
|
|
||||||
|
public IFeatureCollection Features => null;
|
||||||
|
|
||||||
|
public Task StartAsync<TContext>(IHttpApplication<TContext> application, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
Assert.Equal(1, Ordering.Order);
|
||||||
|
Ordering.Order++;
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task StopAsync(CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static void StaticConfigureMethod(IApplicationBuilder app) { }
|
private static void StaticConfigureMethod(IApplicationBuilder app) { }
|
||||||
|
|
||||||
private IWebHostBuilder CreateWebHostBuilder()
|
private IWebHostBuilder CreateWebHostBuilder()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue