Cleanup and add test for CreateDefaultBuilderOfT
This commit is contained in:
parent
07bf8d02a0
commit
7ec8cc5fad
|
|
@ -1,6 +1,6 @@
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio 15
|
# Visual Studio 15
|
||||||
VisualStudioVersion = 15.0.26510.0
|
VisualStudioVersion = 15.0.26923.0
|
||||||
MinimumVisualStudioVersion = 15.0.26730.03
|
MinimumVisualStudioVersion = 15.0.26730.03
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{ED834E68-51C3-4ADE-ACC8-6BA6D4207C09}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{ED834E68-51C3-4ADE-ACC8-6BA6D4207C09}"
|
||||||
ProjectSection(SolutionItems) = preProject
|
ProjectSection(SolutionItems) = preProject
|
||||||
|
|
@ -50,6 +50,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TrimDeps", "tools\TrimDeps\
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DependencyInjectionApp", "test\TestSites\DependencyInjectionApp\DependencyInjectionApp.csproj", "{65FE2E38-4529-4C93-A7B0-CF12DD7A70C3}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DependencyInjectionApp", "test\TestSites\DependencyInjectionApp\DependencyInjectionApp.csproj", "{65FE2E38-4529-4C93-A7B0-CF12DD7A70C3}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CreateDefaultBuilderOfTApp", "test\TestSites\CreateDefaultBuilderOfTApp\CreateDefaultBuilderOfTApp.csproj", "{A922B5AC-836B-44F4-83F1-3CB9EB08A3F8}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
|
@ -96,6 +98,10 @@ Global
|
||||||
{65FE2E38-4529-4C93-A7B0-CF12DD7A70C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{65FE2E38-4529-4C93-A7B0-CF12DD7A70C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{65FE2E38-4529-4C93-A7B0-CF12DD7A70C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{65FE2E38-4529-4C93-A7B0-CF12DD7A70C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{65FE2E38-4529-4C93-A7B0-CF12DD7A70C3}.Release|Any CPU.Build.0 = Release|Any CPU
|
{65FE2E38-4529-4C93-A7B0-CF12DD7A70C3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{A922B5AC-836B-44F4-83F1-3CB9EB08A3F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{A922B5AC-836B-44F4-83F1-3CB9EB08A3F8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{A922B5AC-836B-44F4-83F1-3CB9EB08A3F8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{A922B5AC-836B-44F4-83F1-3CB9EB08A3F8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
@ -113,5 +119,9 @@ Global
|
||||||
{79CF58CE-B020-45D8-BDB5-2D8036BEAD14} = {EC22261D-0DE1-47DE-8F7C-072675D6F5B4}
|
{79CF58CE-B020-45D8-BDB5-2D8036BEAD14} = {EC22261D-0DE1-47DE-8F7C-072675D6F5B4}
|
||||||
{67E4C92F-6D12-4C52-BB79-B8D11BFC6B82} = {ED834E68-51C3-4ADE-ACC8-6BA6D4207C09}
|
{67E4C92F-6D12-4C52-BB79-B8D11BFC6B82} = {ED834E68-51C3-4ADE-ACC8-6BA6D4207C09}
|
||||||
{65FE2E38-4529-4C93-A7B0-CF12DD7A70C3} = {EC22261D-0DE1-47DE-8F7C-072675D6F5B4}
|
{65FE2E38-4529-4C93-A7B0-CF12DD7A70C3} = {EC22261D-0DE1-47DE-8F7C-072675D6F5B4}
|
||||||
|
{A922B5AC-836B-44F4-83F1-3CB9EB08A3F8} = {EC22261D-0DE1-47DE-8F7C-072675D6F5B4}
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {A666E9B0-125B-4975-B35B-09A6D68A5047}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|
|
||||||
|
|
@ -189,10 +189,8 @@ namespace Microsoft.AspNetCore
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="WebHostBuilder"/> class with pre-configured defaults using typed Startup
|
/// Initializes a new instance of the <see cref="WebHostBuilder"/> class with pre-configured defaults using typed Startup.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T">Specify the startup type to be used by the web host.</typeparam>
|
|
||||||
/// <param name="args">The command line args.</param>
|
|
||||||
/// <remarks>
|
/// <remarks>
|
||||||
/// The following defaults are applied to the returned <see cref="WebHostBuilder"/>:
|
/// The following defaults are applied to the returned <see cref="WebHostBuilder"/>:
|
||||||
/// use Kestrel as the web server,
|
/// use Kestrel as the web server,
|
||||||
|
|
@ -200,27 +198,18 @@ namespace Microsoft.AspNetCore
|
||||||
/// load <see cref="IConfiguration"/> from 'appsettings.json' and 'appsettings.[<see cref="IHostingEnvironment.EnvironmentName"/>].json',
|
/// load <see cref="IConfiguration"/> from 'appsettings.json' and 'appsettings.[<see cref="IHostingEnvironment.EnvironmentName"/>].json',
|
||||||
/// load <see cref="IConfiguration"/> from User Secrets when <see cref="IHostingEnvironment.EnvironmentName"/> is 'Development' using the entry assembly,
|
/// load <see cref="IConfiguration"/> from User Secrets when <see cref="IHostingEnvironment.EnvironmentName"/> is 'Development' using the entry assembly,
|
||||||
/// load <see cref="IConfiguration"/> from environment variables,
|
/// load <see cref="IConfiguration"/> from environment variables,
|
||||||
|
/// load <see cref="IConfiguration"/> from supplied command line args,
|
||||||
/// configures the <see cref="ILoggerFactory"/> to log to the console and debug output,
|
/// configures the <see cref="ILoggerFactory"/> to log to the console and debug output,
|
||||||
/// enables IIS integration,
|
/// enables IIS integration,
|
||||||
/// enables the ability for frameworks to bind their options to their default configuration sections,
|
/// enables the ability for frameworks to bind their options to their default configuration sections.
|
||||||
/// adds the developer exception page when <see cref="IHostingEnvironment.EnvironmentName"/> is 'Development'
|
|
||||||
/// and sets the startup class as the typed defined in T.
|
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
|
/// <typeparam name ="TStartup">The type containing the startup methods for the application.</typeparam>
|
||||||
|
/// <param name="args">The command line args.</param>
|
||||||
/// <returns>The initialized <see cref="IWebHostBuilder"/>.</returns>
|
/// <returns>The initialized <see cref="IWebHostBuilder"/>.</returns>
|
||||||
public static IWebHostBuilder CreateDefaultBuilder<T>(string[] args) where T : class
|
public static IWebHostBuilder CreateDefaultBuilder<TStartup>(string[] args) where TStartup : class
|
||||||
{
|
{
|
||||||
return WebHost.CreateDefaultBuilder(args)
|
return CreateDefaultBuilder(args)
|
||||||
.UseStartup<T>();
|
.UseStartup<TStartup>();
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Builds an Microsoft.AspNetCore.Hosting.IWebHost which hosts a web application and
|
|
||||||
/// runs a web application and block the calling thread until host shutdown.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="builder">The <see cref="IWebHostBuilder"/></param>
|
|
||||||
public static void BuildAndRun(this IWebHostBuilder builder)
|
|
||||||
{
|
|
||||||
builder.Build().Run();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@ using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.AspNetCore.Hosting.Server.Features;
|
using Microsoft.AspNetCore.Hosting.Server.Features;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Server.IntegrationTesting;
|
using Microsoft.AspNetCore.Server.IntegrationTesting;
|
||||||
using Microsoft.AspNetCore.Testing;
|
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.Logging.Testing;
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
@ -73,6 +72,32 @@ namespace Microsoft.AspNetCore.Tests
|
||||||
}, setTestEnvVars: true);
|
}, setTestEnvVars: true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task CreateDefaultBuilderOfT_InitializeWithDefaults()
|
||||||
|
{
|
||||||
|
var applicationName = "CreateDefaultBuilderOfTApp";
|
||||||
|
await ExecuteTestApp(applicationName, async (deploymentResult, logger) =>
|
||||||
|
{
|
||||||
|
var response = await RetryHelper.RetryRequest(() => deploymentResult.HttpClient.GetAsync(string.Empty), logger, deploymentResult.HostShutdownToken);
|
||||||
|
|
||||||
|
var responseText = await response.Content.ReadAsStringAsync();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Assert server is Kestrel
|
||||||
|
Assert.Equal("Kestrel", response.Headers.Server.ToString());
|
||||||
|
|
||||||
|
// The application name will be sent in response when all asserts succeed in the test app.
|
||||||
|
Assert.Equal(applicationName, responseText);
|
||||||
|
}
|
||||||
|
catch (XunitException)
|
||||||
|
{
|
||||||
|
logger.LogWarning(response.ToString());
|
||||||
|
logger.LogWarning(responseText);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}, setTestEnvVars: true);
|
||||||
|
}
|
||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData("Development", "InvalidOperationException: Cannot consume scoped service")]
|
[InlineData("Development", "InvalidOperationException: Cannot consume scoped service")]
|
||||||
[InlineData("Production", "Success")]
|
[InlineData("Production", "Success")]
|
||||||
|
|
|
||||||
|
|
@ -2,18 +2,12 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
|
||||||
using Microsoft.AspNetCore;
|
using Microsoft.AspNetCore;
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
|
||||||
using Microsoft.Extensions.Logging.Abstractions;
|
|
||||||
using Microsoft.Extensions.Logging.Console;
|
|
||||||
using Microsoft.Extensions.Logging.Debug;
|
|
||||||
|
|
||||||
namespace CreateDefaultBuilderApp
|
namespace CreateDefaultBuilderApp
|
||||||
{
|
{
|
||||||
|
|
@ -36,11 +30,6 @@ namespace CreateDefaultBuilderApp
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
.Build().Run();
|
.Build().Run();
|
||||||
|
|
||||||
Console.ReadKey();
|
|
||||||
WebHost.CreateDefaultBuilder<Startup>(new[] { "--cliKey", "cliValue" })
|
|
||||||
.BuildAndRun();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string GetResponseMessage(WebHostBuilderContext context, IServiceCollection services)
|
private static string GetResponseMessage(WebHostBuilderContext context, IServiceCollection services)
|
||||||
|
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
using Microsoft.AspNetCore.Builder;
|
|
||||||
using Microsoft.AspNetCore.Hosting;
|
|
||||||
using Microsoft.AspNetCore.Http;
|
|
||||||
|
|
||||||
namespace CreateDefaultBuilderApp
|
|
||||||
{
|
|
||||||
public class Startup
|
|
||||||
{
|
|
||||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
|
||||||
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
|
|
||||||
{
|
|
||||||
app.Run(async (context) =>
|
|
||||||
{
|
|
||||||
await context.Response.WriteAsync("Hello World!");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>netcoreapp2.0</TargetFramework>
|
||||||
|
<UserSecretsId>aspnetcore-CreateDefaultBuilderOfT-20170424224131</UserSecretsId>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\..\src\Microsoft.AspNetCore\Microsoft.AspNetCore.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using Microsoft.AspNetCore;
|
||||||
|
using Microsoft.AspNetCore.Builder;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
|
||||||
|
namespace CreateDefaultBuilderOfTApp
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
static void Main(string[] args) => WebHost.CreateDefaultBuilder<Startup>(new[] { "--cliKey", "cliValue" }) .Build().Run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,63 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using Microsoft.AspNetCore.Builder;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.AspNetCore.Http;
|
||||||
|
|
||||||
|
namespace CreateDefaultBuilderOfTApp
|
||||||
|
{
|
||||||
|
class Startup
|
||||||
|
{
|
||||||
|
public void Configure(IApplicationBuilder app, WebHostBuilderContext webHostBuilderContext)
|
||||||
|
{
|
||||||
|
app.Run(context =>
|
||||||
|
{
|
||||||
|
return context.Response.WriteAsync(GetResponseMessage(webHostBuilderContext));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string GetResponseMessage(WebHostBuilderContext context)
|
||||||
|
{
|
||||||
|
// Verify ContentRootPath set
|
||||||
|
if (!string.Equals(Directory.GetCurrentDirectory(), context.HostingEnvironment.ContentRootPath, StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
return $"Current directory incorrect. Expected: {Directory.GetCurrentDirectory()} Actual: {context.HostingEnvironment.ContentRootPath}";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify appsettings.json loaded
|
||||||
|
if (!string.Equals("settingsValue", context.Configuration["settingsKey"], StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
return $"appsettings.json not loaded into Configuration.";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify appsettings.environment.json loaded
|
||||||
|
if (!string.Equals("devSettingsValue", context.Configuration["devSettingsKey"], StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
return $"appsettings.{context.HostingEnvironment.EnvironmentName}.json not loaded into Configuration.";
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Verify UserSecrets loaded
|
||||||
|
|
||||||
|
// Verify environment variables loaded
|
||||||
|
if (!string.Equals("envValue", context.Configuration["envKey"], StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
return $"Environment variables not loaded into Configuration.";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify command line arguments loaded
|
||||||
|
if (!string.Equals("cliValue", context.Configuration["cliKey"], StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
return $"Command line arguments not loaded into Configuration.";
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Verify AddConsole called
|
||||||
|
// TODO: Verify AddDebug called
|
||||||
|
// TODO: Verify UseIISIntegration called
|
||||||
|
|
||||||
|
return context.HostingEnvironment.ApplicationName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"devSettingsKey": "devSettingsValue"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"settingsKey": "settingsValue"
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue