From 11762840cdb7e1dd064f89e0aec4ae2be9726e19 Mon Sep 17 00:00:00 2001 From: Chris Ross Date: Wed, 19 Mar 2014 11:43:13 -0700 Subject: [PATCH] Add an Initialize step to IServerFactory. --- samples/KWebStartup/project.json | 2 +- src/Microsoft.AspNet.Hosting/HostingContext.cs | 3 +++ src/Microsoft.AspNet.Hosting/HostingEngine.cs | 17 +++++++++++++++-- src/Microsoft.AspNet.Hosting/Program.cs | 1 + .../Server/IServerFactory.cs | 4 +++- .../HostingEngineTests.cs | 10 ++++++++-- .../Microsoft.AspNet.Hosting.Tests/project.json | 1 + 7 files changed, 32 insertions(+), 6 deletions(-) diff --git a/samples/KWebStartup/project.json b/samples/KWebStartup/project.json index 1d16b7bd9e..70b55fad15 100644 --- a/samples/KWebStartup/project.json +++ b/samples/KWebStartup/project.json @@ -5,7 +5,7 @@ "Microsoft.AspNet.Hosting": "0.1-alpha-*", "Microsoft.AspNet.Server.WebListener": "0.1-alpha-*" }, - "commands": { "web": "Microsoft.AspNet.Hosting server.name=Microsoft.AspNet.Server.WebListener" }, + "commands": { "web": "Microsoft.AspNet.Hosting server.name=Microsoft.AspNet.Server.WebListener server.urls=http://localhost:5001" }, "configurations": { "net45": { }, diff --git a/src/Microsoft.AspNet.Hosting/HostingContext.cs b/src/Microsoft.AspNet.Hosting/HostingContext.cs index 303e9e7770..b1d96a88e0 100644 --- a/src/Microsoft.AspNet.Hosting/HostingContext.cs +++ b/src/Microsoft.AspNet.Hosting/HostingContext.cs @@ -1,5 +1,6 @@ using System; using Microsoft.AspNet.Abstractions; +using Microsoft.AspNet.ConfigurationModel; using Microsoft.AspNet.Hosting.Server; namespace Microsoft.AspNet.Hosting @@ -7,6 +8,7 @@ namespace Microsoft.AspNet.Hosting public class HostingContext { public IServiceProvider Services { get; set; } + public IConfiguration Configuration { get; set; } public IBuilder Builder { get; set; } @@ -16,5 +18,6 @@ namespace Microsoft.AspNet.Hosting public string ServerName { get; set; } public IServerFactory ServerFactory { get; set; } + public IServerInformation Server { get; set; } } } \ No newline at end of file diff --git a/src/Microsoft.AspNet.Hosting/HostingEngine.cs b/src/Microsoft.AspNet.Hosting/HostingEngine.cs index 1bf28ef25b..b04d02f65a 100644 --- a/src/Microsoft.AspNet.Hosting/HostingEngine.cs +++ b/src/Microsoft.AspNet.Hosting/HostingEngine.cs @@ -30,10 +30,11 @@ namespace Microsoft.AspNet.Hosting { EnsureBuilder(context); EnsureServerFactory(context); + InitalizeServerFactory(context); EnsureApplicationDelegate(context); var pipeline = new PipelineInstance(_httpContextFactory, context.ApplicationDelegate); - var server = context.ServerFactory.Start(pipeline.Invoke); + var server = context.ServerFactory.Start(context.Server, pipeline.Invoke); return new Disposable(() => { @@ -66,6 +67,19 @@ namespace Microsoft.AspNet.Hosting context.ServerFactory = _serverManager.GetServerFactory(context.ServerName); } + private void InitalizeServerFactory(HostingContext context) + { + if (context.Server == null) + { + context.Server = context.ServerFactory.Initialize(context.Configuration); + } + + if (context.Builder.Server == null) + { + context.Builder.Server = context.Server; + } + } + private void EnsureApplicationDelegate(HostingContext context) { if (context.ApplicationDelegate != null) @@ -74,7 +88,6 @@ namespace Microsoft.AspNet.Hosting } EnsureApplicationStartup(context); - EnsureBuilder(context); context.ApplicationStartup.Invoke(context.Builder); context.ApplicationDelegate = context.Builder.Build(); diff --git a/src/Microsoft.AspNet.Hosting/Program.cs b/src/Microsoft.AspNet.Hosting/Program.cs index 76dffada12..18dc9f4899 100644 --- a/src/Microsoft.AspNet.Hosting/Program.cs +++ b/src/Microsoft.AspNet.Hosting/Program.cs @@ -37,6 +37,7 @@ namespace Microsoft.AspNet.Hosting var context = new HostingContext() { Services = services, + Configuration = config, ServerName = config.Get("server.name"), // TODO: Key names ApplicationName = config.Get("app.name") // TODO: Key names ?? appEnvironment.ApplicationName, diff --git a/src/Microsoft.AspNet.Hosting/Server/IServerFactory.cs b/src/Microsoft.AspNet.Hosting/Server/IServerFactory.cs index 4ae76a13b4..79b4b6c554 100644 --- a/src/Microsoft.AspNet.Hosting/Server/IServerFactory.cs +++ b/src/Microsoft.AspNet.Hosting/Server/IServerFactory.cs @@ -1,6 +1,7 @@ using System; using System.Threading.Tasks; using Microsoft.AspNet.Abstractions; +using Microsoft.AspNet.ConfigurationModel; using Microsoft.Net.Runtime; namespace Microsoft.AspNet.Hosting.Server @@ -8,6 +9,7 @@ namespace Microsoft.AspNet.Hosting.Server // TODO: [AssemblyNeutral] public interface IServerFactory { - IDisposable Start(Func application); + IServerInformation Initialize(IConfiguration configuraiton); + IDisposable Start(IServerInformation serverInformation, Func application); } } diff --git a/test/Microsoft.AspNet.Hosting.Tests/HostingEngineTests.cs b/test/Microsoft.AspNet.Hosting.Tests/HostingEngineTests.cs index eb09beba24..b94ec289b2 100644 --- a/test/Microsoft.AspNet.Hosting.Tests/HostingEngineTests.cs +++ b/test/Microsoft.AspNet.Hosting.Tests/HostingEngineTests.cs @@ -2,9 +2,10 @@ using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNet.Abstractions; +using Microsoft.AspNet.ConfigurationModel; using Microsoft.AspNet.DependencyInjection; -using Microsoft.AspNet.Hosting.Server; using Microsoft.AspNet.DependencyInjection.Fallback; +using Microsoft.AspNet.Hosting.Server; using Xunit; namespace Microsoft.AspNet.Hosting @@ -56,7 +57,12 @@ namespace Microsoft.AspNet.Hosting } - public IDisposable Start(Func application) + public IServerInformation Initialize(IConfiguration configuraiton) + { + return null; + } + + public IDisposable Start(IServerInformation serverInformation, Func application) { var startInstance = new StartInstance(application); _startInstances.Add(startInstance); diff --git a/test/Microsoft.AspNet.Hosting.Tests/project.json b/test/Microsoft.AspNet.Hosting.Tests/project.json index 8c46f5dd94..b99c5d336f 100644 --- a/test/Microsoft.AspNet.Hosting.Tests/project.json +++ b/test/Microsoft.AspNet.Hosting.Tests/project.json @@ -2,6 +2,7 @@ "version": "0.1-alpha-*", "dependencies": { "Microsoft.AspNet.Hosting": "", + "Microsoft.AspNet.ConfigurationModel": "0.1-alpha-*", "Microsoft.AspNet.Abstractions":"0.1-alpha-*", "Microsoft.AspNet.DependencyInjection":"0.1-alpha-*", "Xunit.KRunner": "0.1-alpha-*",