Skip to content
This repository has been archived by the owner on Dec 19, 2018. It is now read-only.

Commit

Permalink
Call application.Initialize during WebApplicationBuilder.Build()
Browse files Browse the repository at this point in the history
  • Loading branch information
davidfowl committed Dec 15, 2015
1 parent 22c1eea commit e535777
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 16 deletions.
13 changes: 10 additions & 3 deletions src/Microsoft.AspNet.Hosting/Internal/WebApplication.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public class WebApplication : IWebApplication
private readonly IConfiguration _config;

private IServiceProvider _applicationServices;
private RequestDelegate _application;

// Only one of these should be set
internal string StartupAssemblyName { get; set; }
Expand Down Expand Up @@ -112,17 +113,23 @@ public ILoggerFactory LoggerFactory
}
}

public virtual IDisposable Start()
public void Initialize()
{
var application = BuildApplication();
if (_application == null)
{
_application = BuildApplication();
}
}

public virtual IDisposable Start()
{
var logger = _applicationServices.GetRequiredService<ILogger<WebApplication>>();
var diagnosticSource = _applicationServices.GetRequiredService<DiagnosticSource>();
var httpContextFactory = _applicationServices.GetRequiredService<IHttpContextFactory>();

logger.Starting();

Server.Start(new HostingApplication(application, logger, diagnosticSource, httpContextFactory));
Server.Start(new HostingApplication(_application, logger, diagnosticSource, httpContextFactory));

_applicationLifetime.NotifyStarted();
logger.Started();
Expand Down
2 changes: 2 additions & 0 deletions src/Microsoft.AspNet.Hosting/WebApplicationBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,8 @@ public IWebApplication Build()
application.StartupType = _startupType;
application.StartupAssemblyName = _startupAssemblyName ?? _options.Application ?? appEnvironment.ApplicationName;

application.Initialize();

return application;
}

Expand Down
23 changes: 11 additions & 12 deletions test/Microsoft.AspNet.Hosting.Tests/HostingEngineTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -239,29 +239,28 @@ public void HostingEngineInjectsHostingEnvironment()
[Fact]
public void CanReplaceStartupLoader()
{
var application = CreateBuilder()
var builder = CreateBuilder()
.ConfigureServices(services =>
{
services.AddTransient<IStartupLoader, TestLoader>();
})
.UseServer(this)
.UseStartup("Microsoft.AspNet.Hosting.Tests")
.Build();
.UseStartup("Microsoft.AspNet.Hosting.Tests");

Assert.Throws<NotImplementedException>(() => application.Start());
Assert.Throws<NotImplementedException>(() => builder.Build());
}

[Fact]
public void CanCreateApplicationServicesWithAddedServices()
{
var application = CreateBuilder().ConfigureServices(services => services.AddOptions()).Build();
var application = CreateBuilder().UseServer(this).ConfigureServices(services => services.AddOptions()).Build();
Assert.NotNull(application.Services.GetRequiredService<IOptions<object>>());
}

[Fact]
public void EnvDefaultsToProductionIfNoConfig()
{
var application = CreateBuilder().Build();
var application = CreateBuilder().UseServer(this).Build();
var env = application.HostingEnvironment;
Assert.Equal(EnvironmentName.Production, env.EnvironmentName);
}
Expand All @@ -280,7 +279,7 @@ public void EnvDefaultsToConfigValueIfSpecifiedWithOldKey()
.AddInMemoryCollection(vals);
var config = builder.Build();

var application = CreateBuilder(config).Build();
var application = CreateBuilder(config).UseServer(this).Build();
var env = application.HostingEnvironment;
Assert.Equal("Staging", env.EnvironmentName);
}
Expand All @@ -297,7 +296,7 @@ public void EnvDefaultsToConfigValueIfSpecified()
.AddInMemoryCollection(vals);
var config = builder.Build();

var application = CreateBuilder(config).Build();
var application = CreateBuilder(config).UseServer(this).Build();
var env = application.HostingEnvironment;
Assert.Equal("Staging", env.EnvironmentName);
}
Expand Down Expand Up @@ -432,11 +431,11 @@ public void Configure(IApplicationBuilder app)
[Fact]
public void HostingEngine_ThrowsForBadConfigureServiceSignature()
{
var engine = CreateBuilder()
var builder = CreateBuilder()
.UseServer(this)
.UseStartup<BadConfigureServicesStartup>()
.Build();
var ex = Assert.Throws<InvalidOperationException>(() => engine.Start());
.UseStartup<BadConfigureServicesStartup>();

var ex = Assert.Throws<InvalidOperationException>(() => builder.Build());
Assert.True(ex.Message.Contains("ConfigureServices"));
}

Expand Down
3 changes: 2 additions & 1 deletion test/Microsoft.AspNet.Hosting.Tests/WebHostBuilderTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ public void UseEnvironmentIsNotOverriden()
var application = new WebApplicationBuilder()
.UseConfiguration(config)
.UseEnvironment(expected)
.UseServer(new TestServer())
.Build();

Assert.Equal(expected, application.HostingEnvironment.EnvironmentName);
Expand All @@ -156,7 +157,7 @@ private WebApplicationBuilder CreateWebHostBuilder()
var builder = new ConfigurationBuilder()
.AddInMemoryCollection(vals);
var config = builder.Build();
return new WebApplicationBuilder().UseConfiguration(config);
return new WebApplicationBuilder().UseConfiguration(config).UseServer(new TestServer());
}

private async Task AssertResponseContains(RequestDelegate app, string expectedText)
Expand Down

0 comments on commit e535777

Please sign in to comment.