#434 Make sure IApplicationLifetime gets added even if startup throws.
This commit is contained in:
parent
0107ba005b
commit
52796a09a2
|
|
@ -70,6 +70,7 @@ namespace Microsoft.AspNet.Hosting.Internal
|
||||||
_startupLoader = startupLoader;
|
_startupLoader = startupLoader;
|
||||||
_captureStartupErrors = captureStartupErrors;
|
_captureStartupErrors = captureStartupErrors;
|
||||||
_applicationLifetime = new ApplicationLifetime();
|
_applicationLifetime = new ApplicationLifetime();
|
||||||
|
_applicationServiceCollection.AddInstance<IApplicationLifetime>(_applicationLifetime);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IServiceProvider ApplicationServices
|
public IServiceProvider ApplicationServices
|
||||||
|
|
@ -144,7 +145,6 @@ namespace Microsoft.AspNet.Hosting.Internal
|
||||||
if (_applicationServices == null)
|
if (_applicationServices == null)
|
||||||
{
|
{
|
||||||
EnsureStartup();
|
EnsureStartup();
|
||||||
_applicationServiceCollection.AddInstance<IApplicationLifetime>(_applicationLifetime);
|
|
||||||
_applicationServices = Startup.ConfigureServicesDelegate(_applicationServiceCollection);
|
_applicationServices = Startup.ConfigureServicesDelegate(_applicationServiceCollection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ using Microsoft.AspNet.Hosting.Server;
|
||||||
using Microsoft.AspNet.Http.Features;
|
using Microsoft.AspNet.Http.Features;
|
||||||
using Microsoft.AspNet.Http.Internal;
|
using Microsoft.AspNet.Http.Internal;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Hosting
|
namespace Microsoft.AspNet.Hosting
|
||||||
|
|
@ -42,7 +43,7 @@ namespace Microsoft.AspNet.Hosting
|
||||||
{
|
{
|
||||||
var builder = CreateWebHostBuilder();
|
var builder = CreateWebHostBuilder();
|
||||||
var serverFactory = new TestServerFactory();
|
var serverFactory = new TestServerFactory();
|
||||||
var engine = (HostingEngine)builder.UseServer(serverFactory).UseStartup("MissingStartupAssembly").Build();
|
var engine = builder.UseServer(serverFactory).UseStartup("MissingStartupAssembly").Build();
|
||||||
using (engine.Start())
|
using (engine.Start())
|
||||||
{
|
{
|
||||||
await AssertResponseContains(serverFactory.Application, "MissingStartupAssembly");
|
await AssertResponseContains(serverFactory.Application, "MissingStartupAssembly");
|
||||||
|
|
@ -54,7 +55,7 @@ namespace Microsoft.AspNet.Hosting
|
||||||
{
|
{
|
||||||
var builder = CreateWebHostBuilder();
|
var builder = CreateWebHostBuilder();
|
||||||
var serverFactory = new TestServerFactory();
|
var serverFactory = new TestServerFactory();
|
||||||
var engine = (HostingEngine)builder.UseServer(serverFactory).UseStartup<StartupStaticCtorThrows>().Build();
|
var engine = builder.UseServer(serverFactory).UseStartup<StartupStaticCtorThrows>().Build();
|
||||||
using (engine.Start())
|
using (engine.Start())
|
||||||
{
|
{
|
||||||
await AssertResponseContains(serverFactory.Application, "Exception from static constructor");
|
await AssertResponseContains(serverFactory.Application, "Exception from static constructor");
|
||||||
|
|
@ -66,19 +67,33 @@ namespace Microsoft.AspNet.Hosting
|
||||||
{
|
{
|
||||||
var builder = CreateWebHostBuilder();
|
var builder = CreateWebHostBuilder();
|
||||||
var serverFactory = new TestServerFactory();
|
var serverFactory = new TestServerFactory();
|
||||||
var engine = (HostingEngine)builder.UseServer(serverFactory).UseStartup<StartupCtorThrows>().Build();
|
var engine = builder.UseServer(serverFactory).UseStartup<StartupCtorThrows>().Build();
|
||||||
using (engine.Start())
|
using (engine.Start())
|
||||||
{
|
{
|
||||||
await AssertResponseContains(serverFactory.Application, "Exception from constructor");
|
await AssertResponseContains(serverFactory.Application, "Exception from constructor");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task IApplicationLifetimeRegisteredEvenWhenStartupCtorThrows_Fallback()
|
||||||
|
{
|
||||||
|
var builder = CreateWebHostBuilder();
|
||||||
|
var serverFactory = new TestServerFactory();
|
||||||
|
var engine = builder.UseServer(serverFactory).UseStartup<StartupCtorThrows>().Build();
|
||||||
|
using (engine.Start())
|
||||||
|
{
|
||||||
|
var service = engine.ApplicationServices.GetService<IApplicationLifetime>();
|
||||||
|
Assert.NotNull(service);
|
||||||
|
await AssertResponseContains(serverFactory.Application, "Exception from constructor");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task StartupConfigureServicesThrows_Fallback()
|
public async Task StartupConfigureServicesThrows_Fallback()
|
||||||
{
|
{
|
||||||
var builder = CreateWebHostBuilder();
|
var builder = CreateWebHostBuilder();
|
||||||
var serverFactory = new TestServerFactory();
|
var serverFactory = new TestServerFactory();
|
||||||
var engine = (HostingEngine)builder.UseServer(serverFactory).UseStartup<StartupConfigureServicesThrows>().Build();
|
var engine = builder.UseServer(serverFactory).UseStartup<StartupConfigureServicesThrows>().Build();
|
||||||
using (engine.Start())
|
using (engine.Start())
|
||||||
{
|
{
|
||||||
await AssertResponseContains(serverFactory.Application, "Exception from ConfigureServices");
|
await AssertResponseContains(serverFactory.Application, "Exception from ConfigureServices");
|
||||||
|
|
@ -90,7 +105,7 @@ namespace Microsoft.AspNet.Hosting
|
||||||
{
|
{
|
||||||
var builder = CreateWebHostBuilder();
|
var builder = CreateWebHostBuilder();
|
||||||
var serverFactory = new TestServerFactory();
|
var serverFactory = new TestServerFactory();
|
||||||
var engine = (HostingEngine)builder.UseServer(serverFactory).UseStartup<StartupConfigureServicesThrows>().Build();
|
var engine = builder.UseServer(serverFactory).UseStartup<StartupConfigureServicesThrows>().Build();
|
||||||
using (engine.Start())
|
using (engine.Start())
|
||||||
{
|
{
|
||||||
await AssertResponseContains(serverFactory.Application, "Exception from Configure");
|
await AssertResponseContains(serverFactory.Application, "Exception from Configure");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue