From 3774b6055f64e1ce478bce293d8a448a90fe5cc7 Mon Sep 17 00:00:00 2001 From: Pavel Krymets Date: Tue, 20 Oct 2015 09:11:02 -0700 Subject: [PATCH] React to xnd dependency injection refactorings --- src/Microsoft.AspNet.Hosting/Program.cs | 15 +++---- .../WebHostBuilder.cs | 39 +++++++------------ src/Microsoft.AspNet.TestHost/TestServer.cs | 27 +++++++------ .../HostingEngineTests.cs | 4 +- .../WebHostBuilderTests.cs | 2 +- .../TestServerTests.cs | 13 ------- 6 files changed, 35 insertions(+), 65 deletions(-) diff --git a/src/Microsoft.AspNet.Hosting/Program.cs b/src/Microsoft.AspNet.Hosting/Program.cs index 48a71bbcde..c324b4e9c1 100644 --- a/src/Microsoft.AspNet.Hosting/Program.cs +++ b/src/Microsoft.AspNet.Hosting/Program.cs @@ -4,9 +4,11 @@ using System; using Microsoft.AspNet.Http.Features; using Microsoft.AspNet.Server.Features; +using Microsoft.Dnx.Compilation; using Microsoft.Dnx.Runtime; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; namespace Microsoft.AspNet.Hosting { @@ -15,21 +17,14 @@ namespace Microsoft.AspNet.Hosting private const string HostingJsonFile = "Microsoft.AspNet.Hosting.json"; private const string ConfigFileKey = "config"; - private readonly IServiceProvider _serviceProvider; - - public Program(IServiceProvider serviceProvider) - { - _serviceProvider = serviceProvider; - } - - public void Main(string[] args) + public static void Main(string[] args) { // Allow the location of the json file to be specified via a --config command line arg var tempBuilder = new ConfigurationBuilder().AddCommandLine(args); var tempConfig = tempBuilder.Build(); var configFilePath = tempConfig[ConfigFileKey] ?? HostingJsonFile; - var appBasePath = _serviceProvider.GetRequiredService().ApplicationBasePath; + var appBasePath = PlatformServices.Default.Application.ApplicationBasePath; var config = new ConfigurationBuilder() .SetBasePath(appBasePath) .AddJsonFile(configFilePath, optional: true) @@ -37,7 +32,7 @@ namespace Microsoft.AspNet.Hosting .AddCommandLine(args) .Build(); - var host = new WebHostBuilder(_serviceProvider, config, captureStartupErrors: true).Build(); + var host = new WebHostBuilder(config, captureStartupErrors: true).Build(); using (var app = host.Start()) { var hostingEnv = app.Services.GetRequiredService(); diff --git a/src/Microsoft.AspNet.Hosting/WebHostBuilder.cs b/src/Microsoft.AspNet.Hosting/WebHostBuilder.cs index 16c7fb67e4..815684d2b9 100644 --- a/src/Microsoft.AspNet.Hosting/WebHostBuilder.cs +++ b/src/Microsoft.AspNet.Hosting/WebHostBuilder.cs @@ -10,9 +10,11 @@ using Microsoft.AspNet.Hosting.Server; using Microsoft.AspNet.Hosting.Startup; using Microsoft.AspNet.Http; using Microsoft.AspNet.Http.Internal; +using Microsoft.Dnx.Compilation; using Microsoft.Dnx.Runtime; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Logging; namespace Microsoft.AspNet.Hosting @@ -27,8 +29,7 @@ namespace Microsoft.AspNet.Hosting public const string OldServerKey = "server"; public const string ServerKey = "Hosting:Server"; - - private readonly IServiceProvider _services; + private readonly IHostingEnvironment _hostingEnvironment; private readonly ILoggerFactory _loggerFactory; private readonly IConfiguration _config; @@ -45,23 +46,18 @@ namespace Microsoft.AspNet.Hosting private string _serverFactoryLocation; private IServerFactory _serverFactory; - public WebHostBuilder(IServiceProvider services) - : this(services, config: new ConfigurationBuilder().Build()) + public WebHostBuilder() + : this(config: new ConfigurationBuilder().Build()) { } - public WebHostBuilder(IServiceProvider services, IConfiguration config) - : this(services, config: config, captureStartupErrors: false) + public WebHostBuilder(IConfiguration config) + : this(config: config, captureStartupErrors: false) { } - public WebHostBuilder(IServiceProvider services, IConfiguration config, bool captureStartupErrors) + public WebHostBuilder(IConfiguration config, bool captureStartupErrors) { - if (services == null) - { - throw new ArgumentNullException(nameof(services)); - } - if (config == null) { throw new ArgumentNullException(nameof(config)); @@ -69,7 +65,6 @@ namespace Microsoft.AspNet.Hosting _hostingEnvironment = new HostingEnvironment(); _loggerFactory = new LoggerFactory(); - _services = services; _config = config; _captureStartupErrors = captureStartupErrors; } @@ -77,17 +72,6 @@ namespace Microsoft.AspNet.Hosting private IServiceCollection BuildHostingServices() { var services = new ServiceCollection(); - - // Import from manifest - var manifest = _services.GetService(); - if (manifest != null) - { - foreach (var service in manifest.Services) - { - services.AddTransient(service, sp => _services.GetService(service)); - } - } - services.AddInstance(_hostingEnvironment); services.AddInstance(_loggerFactory); @@ -111,6 +95,13 @@ namespace Microsoft.AspNet.Hosting _configureServices(services); } + services.TryAdd(ServiceDescriptor.Instance(PlatformServices.Default.Application)); + services.TryAdd(ServiceDescriptor.Instance(PlatformServices.Default.Runtime)); + services.TryAdd(ServiceDescriptor.Instance(PlatformServices.Default.AssemblyLoadContextAccessor)); + services.TryAdd(ServiceDescriptor.Instance(PlatformServices.Default.AssemblyLoaderContainer)); + services.TryAdd(ServiceDescriptor.Instance(PlatformServices.Default.LibraryManager)); + services.TryAdd(ServiceDescriptor.Instance(CompilationServices.Default.LibraryExporter)); + return services; } diff --git a/src/Microsoft.AspNet.TestHost/TestServer.cs b/src/Microsoft.AspNet.TestHost/TestServer.cs index 6cdaffc401..331ad7fd76 100644 --- a/src/Microsoft.AspNet.TestHost/TestServer.cs +++ b/src/Microsoft.AspNet.TestHost/TestServer.cs @@ -33,32 +33,32 @@ namespace Microsoft.AspNet.TestHost public static TestServer Create() { - return Create(services: null, config: null, configureApp: null, configureServices: null); + return Create(config: null, configureApp: null, configureServices: null); } public static TestServer Create(Action configureApp) { - return Create(services: null, config: null, configureApp: configureApp, configureServices: null); + return Create(config: null, configureApp: configureApp, configureServices: null); } public static TestServer Create(Action configureApp, Action configureServices) { - return Create(services: null, config: null, configureApp: configureApp, configureServices: configureServices); + return Create(config: null, configureApp: configureApp, configureServices: configureServices); } - public static TestServer Create(IServiceProvider services, Action configureApp, Func configureServices) + public static TestServer Create(Action configureApp, Func configureServices) { - return new TestServer(CreateBuilder(services, config: null, configureApp: configureApp, configureServices: configureServices)); + return new TestServer(CreateBuilder(config: null, configureApp: configureApp, configureServices: configureServices)); } - public static TestServer Create(IServiceProvider services, IConfiguration config, Action configureApp, Action configureServices) + public static TestServer Create(IConfiguration config, Action configureApp, Action configureServices) { - return new TestServer(CreateBuilder(services, config, configureApp, configureServices)); + return new TestServer(CreateBuilder(config, configureApp, configureServices)); } - public static WebHostBuilder CreateBuilder(IServiceProvider services, IConfiguration config, Action configureApp, Action configureServices) + public static WebHostBuilder CreateBuilder(IConfiguration config, Action configureApp, Action configureServices) { - return CreateBuilder(services, config, configureApp, + return CreateBuilder(config, configureApp, s => { if (configureServices != null) @@ -69,21 +69,20 @@ namespace Microsoft.AspNet.TestHost }); } - public static WebHostBuilder CreateBuilder(IServiceProvider services, IConfiguration config, Action configureApp, Func configureServices) + public static WebHostBuilder CreateBuilder(IConfiguration config, Action configureApp, Func configureServices) { - return CreateBuilder(services, config).UseStartup(configureApp, configureServices); + return CreateBuilder(config).UseStartup(configureApp, configureServices); } - public static WebHostBuilder CreateBuilder(IServiceProvider services, IConfiguration config) + public static WebHostBuilder CreateBuilder(IConfiguration config) { return new WebHostBuilder( - services ?? CallContextServiceLocator.Locator.ServiceProvider, config ?? new ConfigurationBuilder().Build()); } public static WebHostBuilder CreateBuilder() { - return CreateBuilder(services: null, config: null); + return CreateBuilder(config: null); } public HttpMessageHandler CreateHandler() diff --git a/test/Microsoft.AspNet.Hosting.Tests/HostingEngineTests.cs b/test/Microsoft.AspNet.Hosting.Tests/HostingEngineTests.cs index e640180a97..11fa37b5fe 100644 --- a/test/Microsoft.AspNet.Hosting.Tests/HostingEngineTests.cs +++ b/test/Microsoft.AspNet.Hosting.Tests/HostingEngineTests.cs @@ -405,9 +405,7 @@ namespace Microsoft.AspNet.Hosting private WebHostBuilder CreateBuilder(IConfiguration config = null) { - return new WebHostBuilder( - CallContextServiceLocator.Locator.ServiceProvider, - config ?? new ConfigurationBuilder().Build()); + return new WebHostBuilder(config ?? new ConfigurationBuilder().Build()); } public IFeatureCollection Initialize(IConfiguration configuration) diff --git a/test/Microsoft.AspNet.Hosting.Tests/WebHostBuilderTests.cs b/test/Microsoft.AspNet.Hosting.Tests/WebHostBuilderTests.cs index 4cd92b967e..078019aff5 100644 --- a/test/Microsoft.AspNet.Hosting.Tests/WebHostBuilderTests.cs +++ b/test/Microsoft.AspNet.Hosting.Tests/WebHostBuilderTests.cs @@ -108,7 +108,7 @@ namespace Microsoft.AspNet.Hosting var builder = new ConfigurationBuilder() .AddInMemoryCollection(vals); var config = builder.Build(); - return new WebHostBuilder(CallContextServiceLocator.Locator.ServiceProvider, config, captureStartupErrors: true); + return new WebHostBuilder(config, captureStartupErrors: true); } private async Task AssertResponseContains(Func app, string expectedText) diff --git a/test/Microsoft.AspNet.TestHost.Tests/TestServerTests.cs b/test/Microsoft.AspNet.TestHost.Tests/TestServerTests.cs index 9a1f79124b..626ae24631 100644 --- a/test/Microsoft.AspNet.TestHost.Tests/TestServerTests.cs +++ b/test/Microsoft.AspNet.TestHost.Tests/TestServerTests.cs @@ -31,19 +31,6 @@ namespace Microsoft.AspNet.TestHost TestServer.Create(app => { }); } - [Fact] - public void ThrowsIfNoApplicationEnvironmentIsRegisteredWithTheProvider() - { - // Arrange - var services = new ServiceCollection().BuildServiceProvider(); - - // Act & Assert - Assert.Throws( - () => TestServer.Create( - services, - new ConfigurationBuilder().Build(), new Startup().Configure, configureServices: null)); - } - [Fact] public async Task RequestServicesAutoCreated() {