From 04c30c8bb769aa5aea9fc7e63b0f8d47b81bdb72 Mon Sep 17 00:00:00 2001 From: Pavel Krymets Date: Thu, 19 Nov 2015 10:43:08 -0800 Subject: [PATCH] Flow configuration via IHostingEnvironment --- .../IHostingEnvironment.cs | 6 ++++++ .../project.json | 3 ++- .../HostingEnvironment.cs | 4 +++- .../HostingEnvironmentExtensions.cs | 4 +++- src/Microsoft.AspNet.Hosting/WebHostBuilder.cs | 2 +- .../HostingEngineTests.cs | 18 ++++++++++++++++++ 6 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.AspNet.Hosting.Abstractions/IHostingEnvironment.cs b/src/Microsoft.AspNet.Hosting.Abstractions/IHostingEnvironment.cs index 6f357d3ca2..cfc96be02f 100644 --- a/src/Microsoft.AspNet.Hosting.Abstractions/IHostingEnvironment.cs +++ b/src/Microsoft.AspNet.Hosting.Abstractions/IHostingEnvironment.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using Microsoft.AspNet.FileProviders; +using Microsoft.Extensions.Configuration; namespace Microsoft.AspNet.Hosting { @@ -28,5 +29,10 @@ namespace Microsoft.AspNet.Hosting /// // This must be settable! IFileProvider WebRootFileProvider { get; set; } + + /// + /// Gets or sets the configuration object used by hosting environment. + /// + IConfiguration Configuration { get; set; } } } \ No newline at end of file diff --git a/src/Microsoft.AspNet.Hosting.Abstractions/project.json b/src/Microsoft.AspNet.Hosting.Abstractions/project.json index d8764590da..087bc75058 100644 --- a/src/Microsoft.AspNet.Hosting.Abstractions/project.json +++ b/src/Microsoft.AspNet.Hosting.Abstractions/project.json @@ -11,7 +11,8 @@ }, "dependencies": { "Microsoft.AspNet.Http.Abstractions": "1.0.0-*", - "Microsoft.AspNet.FileProviders.Abstractions": "1.0.0-*" + "Microsoft.AspNet.FileProviders.Abstractions": "1.0.0-*", + "Microsoft.Extensions.Configuration.Abstractions": "1.0.0-*" }, "frameworks": { "net451": {}, diff --git a/src/Microsoft.AspNet.Hosting/HostingEnvironment.cs b/src/Microsoft.AspNet.Hosting/HostingEnvironment.cs index 57617c2893..e7254247a2 100644 --- a/src/Microsoft.AspNet.Hosting/HostingEnvironment.cs +++ b/src/Microsoft.AspNet.Hosting/HostingEnvironment.cs @@ -2,7 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using Microsoft.AspNet.FileProviders; -using Microsoft.AspNet.Hosting.Internal; +using Microsoft.Extensions.Configuration; namespace Microsoft.AspNet.Hosting { @@ -13,5 +13,7 @@ namespace Microsoft.AspNet.Hosting public string WebRootPath { get; set; } public IFileProvider WebRootFileProvider { get; set; } + + public IConfiguration Configuration { get; set; } } } \ No newline at end of file diff --git a/src/Microsoft.AspNet.Hosting/HostingEnvironmentExtensions.cs b/src/Microsoft.AspNet.Hosting/HostingEnvironmentExtensions.cs index b6e5e8071a..6b1fd8c346 100644 --- a/src/Microsoft.AspNet.Hosting/HostingEnvironmentExtensions.cs +++ b/src/Microsoft.AspNet.Hosting/HostingEnvironmentExtensions.cs @@ -10,7 +10,7 @@ namespace Microsoft.AspNet.Hosting { public static class HostingEnvironmentExtensions { - public static void Initialize(this IHostingEnvironment hostingEnvironment, string applicationBasePath, WebHostOptions options) + public static void Initialize(this IHostingEnvironment hostingEnvironment, string applicationBasePath, WebHostOptions options, IConfiguration configuration) { if (options == null) { @@ -46,6 +46,8 @@ namespace Microsoft.AspNet.Hosting var environmentName = options.Environment; hostingEnvironment.EnvironmentName = environmentName ?? hostingEnvironment.EnvironmentName; + + hostingEnvironment.Configuration = configuration; } } } \ No newline at end of file diff --git a/src/Microsoft.AspNet.Hosting/WebHostBuilder.cs b/src/Microsoft.AspNet.Hosting/WebHostBuilder.cs index 9ad73e964a..bc7e0c7883 100644 --- a/src/Microsoft.AspNet.Hosting/WebHostBuilder.cs +++ b/src/Microsoft.AspNet.Hosting/WebHostBuilder.cs @@ -126,7 +126,7 @@ namespace Microsoft.AspNet.Hosting var appEnvironment = hostingContainer.GetRequiredService(); var startupLoader = hostingContainer.GetRequiredService(); - _hostingEnvironment.Initialize(appEnvironment.ApplicationBasePath, _options); + _hostingEnvironment.Initialize(appEnvironment.ApplicationBasePath, _options, _config); if (!string.IsNullOrEmpty(_environmentName)) { _hostingEnvironment.EnvironmentName = _environmentName; diff --git a/test/Microsoft.AspNet.Hosting.Tests/HostingEngineTests.cs b/test/Microsoft.AspNet.Hosting.Tests/HostingEngineTests.cs index a31fbd5d43..1268e981fe 100644 --- a/test/Microsoft.AspNet.Hosting.Tests/HostingEngineTests.cs +++ b/test/Microsoft.AspNet.Hosting.Tests/HostingEngineTests.cs @@ -144,6 +144,24 @@ namespace Microsoft.AspNet.Hosting Assert.Equal("http://localhost:5000", app.ServerFeatures.Get().Addresses.First()); } + [Fact] + public void FlowsConfig() + { + var vals = new Dictionary + { + { "Server", "Microsoft.AspNet.Hosting.Tests" } + }; + + var builder = new ConfigurationBuilder() + .AddInMemoryCollection(vals); + var config = builder.Build(); + var host = CreateBuilder(config).Build(); + var app = host.Start(); + var hostingEnvironment = host.ApplicationServices.GetRequiredService(); + Assert.NotNull(hostingEnvironment.Configuration); + Assert.Equal("Microsoft.AspNet.Hosting.Tests", hostingEnvironment.Configuration["Server"]); + } + [Fact] public void HostingEngineCanBeStarted() {