React to xnd dependency injection refactorings

This commit is contained in:
Pavel Krymets 2015-10-20 09:11:02 -07:00
parent 828e8d755e
commit 3774b6055f
6 changed files with 35 additions and 65 deletions

View File

@ -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<IApplicationEnvironment>().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<IHostingEnvironment>();

View File

@ -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<IRuntimeServices>();
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;
}

View File

@ -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<IApplicationBuilder> configureApp)
{
return Create(services: null, config: null, configureApp: configureApp, configureServices: null);
return Create(config: null, configureApp: configureApp, configureServices: null);
}
public static TestServer Create(Action<IApplicationBuilder> configureApp, Action<IServiceCollection> 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<IApplicationBuilder> configureApp, Func<IServiceCollection, IServiceProvider> configureServices)
public static TestServer Create(Action<IApplicationBuilder> configureApp, Func<IServiceCollection, IServiceProvider> 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<IApplicationBuilder> configureApp, Action<IServiceCollection> configureServices)
public static TestServer Create(IConfiguration config, Action<IApplicationBuilder> configureApp, Action<IServiceCollection> 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<IApplicationBuilder> configureApp, Action<IServiceCollection> configureServices)
public static WebHostBuilder CreateBuilder(IConfiguration config, Action<IApplicationBuilder> configureApp, Action<IServiceCollection> 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<IApplicationBuilder> configureApp, Func<IServiceCollection, IServiceProvider> configureServices)
public static WebHostBuilder CreateBuilder(IConfiguration config, Action<IApplicationBuilder> configureApp, Func<IServiceCollection, IServiceProvider> 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()

View File

@ -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)

View File

@ -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<IFeatureCollection, Task> app, string expectedText)

View File

@ -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<InvalidOperationException>(
() => TestServer.Create(
services,
new ConfigurationBuilder().Build(), new Startup().Configure, configureServices: null));
}
[Fact]
public async Task RequestServicesAutoCreated()
{