Remove the implicit hosting dependency on WebHostBuilderFactory shared sources
This commit is contained in:
parent
159a5f777e
commit
cda9ec6fe4
|
|
@ -5,46 +5,50 @@ using System;
|
|||
|
||||
namespace Microsoft.AspNetCore.Hosting.WebHostBuilderFactory
|
||||
{
|
||||
internal class FactoryResolutionResult
|
||||
internal class FactoryResolutionResult<TWebHost,TWebHostBuilder>
|
||||
{
|
||||
public FactoryResolutionResultKind ResultKind { get; set; }
|
||||
public Type ProgramType { get; set; }
|
||||
public Func<string[], IWebHost> WebHostFactory { get; set; }
|
||||
public Func<string[], IWebHostBuilder> WebHostBuilderFactory { get; set; }
|
||||
public Func<string[], TWebHost> WebHostFactory { get; set; }
|
||||
public Func<string[], TWebHostBuilder> WebHostBuilderFactory { get; set; }
|
||||
|
||||
internal static FactoryResolutionResult NoBuildWebHost(Type programType) =>
|
||||
new FactoryResolutionResult
|
||||
internal static FactoryResolutionResult<TWebHost, TWebHostBuilder> NoBuildWebHost(Type programType) =>
|
||||
new FactoryResolutionResult<TWebHost, TWebHostBuilder>
|
||||
{
|
||||
ProgramType = programType,
|
||||
ResultKind = FactoryResolutionResultKind.NoBuildWebHost
|
||||
};
|
||||
|
||||
internal static FactoryResolutionResult NoCreateWebHostBuilder(Type programType) =>
|
||||
new FactoryResolutionResult
|
||||
internal static FactoryResolutionResult<TWebHost, TWebHostBuilder> NoCreateWebHostBuilder(Type programType) =>
|
||||
new FactoryResolutionResult<TWebHost, TWebHostBuilder>
|
||||
{
|
||||
ProgramType = programType,
|
||||
ResultKind = FactoryResolutionResultKind.NoCreateWebHostBuilder
|
||||
};
|
||||
|
||||
internal static FactoryResolutionResult NoEntryPoint() =>
|
||||
new FactoryResolutionResult
|
||||
internal static FactoryResolutionResult<TWebHost, TWebHostBuilder> NoEntryPoint() =>
|
||||
new FactoryResolutionResult<TWebHost, TWebHostBuilder>
|
||||
{
|
||||
ResultKind = FactoryResolutionResultKind.NoEntryPoint
|
||||
};
|
||||
|
||||
internal static FactoryResolutionResult Succeded(Func<string[], IWebHost> factory, Type programType) => new FactoryResolutionResult
|
||||
internal static FactoryResolutionResult<TWebHost, TWebHostBuilder> Succeded(Func<string[], TWebHost> factory, Type programType) => new FactoryResolutionResult<TWebHost, TWebHostBuilder>
|
||||
{
|
||||
ProgramType = programType,
|
||||
ResultKind = FactoryResolutionResultKind.Success,
|
||||
WebHostFactory = factory
|
||||
};
|
||||
|
||||
internal static FactoryResolutionResult Succeded(Func<string[], IWebHostBuilder> factory, Type programType) => new FactoryResolutionResult
|
||||
internal static FactoryResolutionResult<TWebHost, TWebHostBuilder> Succeded(Func<string[], TWebHostBuilder> factory, Type programType) => new FactoryResolutionResult<TWebHost, TWebHostBuilder>
|
||||
{
|
||||
ProgramType = programType,
|
||||
ResultKind = FactoryResolutionResultKind.Success,
|
||||
WebHostBuilderFactory = factory,
|
||||
WebHostFactory = args => factory(args).Build()
|
||||
WebHostFactory = args =>
|
||||
{
|
||||
var builder = factory(args);
|
||||
return (TWebHost)builder.GetType().GetMethod("Build").Invoke(builder, Array.Empty<object>());
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,28 +11,28 @@ namespace Microsoft.AspNetCore.Hosting.WebHostBuilderFactory
|
|||
public static readonly string CreateWebHostBuilder = nameof(CreateWebHostBuilder);
|
||||
public static readonly string BuildWebHost = nameof(BuildWebHost);
|
||||
|
||||
public static FactoryResolutionResult ResolveWebHostBuilderFactory(Assembly assembly)
|
||||
public static FactoryResolutionResult<TWebhost,TWebhostBuilder> ResolveWebHostBuilderFactory<TWebhost, TWebhostBuilder>(Assembly assembly)
|
||||
{
|
||||
var programType = assembly?.EntryPoint?.DeclaringType;
|
||||
if (programType == null)
|
||||
{
|
||||
return FactoryResolutionResult.NoEntryPoint();
|
||||
return FactoryResolutionResult<TWebhost, TWebhostBuilder>.NoEntryPoint();
|
||||
}
|
||||
|
||||
var factory = programType?.GetTypeInfo().GetDeclaredMethod(CreateWebHostBuilder);
|
||||
if (factory == null)
|
||||
{
|
||||
return FactoryResolutionResult.NoCreateWebHostBuilder(programType);
|
||||
return FactoryResolutionResult<TWebhost, TWebhostBuilder>.NoCreateWebHostBuilder(programType);
|
||||
}
|
||||
|
||||
return FactoryResolutionResult.Succeded(args => (IWebHostBuilder)factory.Invoke(null, new object[] { args }), programType);
|
||||
return FactoryResolutionResult<TWebhost, TWebhostBuilder>.Succeded(args => (TWebhostBuilder)factory.Invoke(null, new object[] { args }), programType);
|
||||
}
|
||||
|
||||
public static FactoryResolutionResult ResolveWebHostFactory(Assembly assembly)
|
||||
public static FactoryResolutionResult<TWebhost, TWebhostBuilder> ResolveWebHostFactory<TWebhost, TWebhostBuilder>(Assembly assembly)
|
||||
{
|
||||
// We want to give priority to BuildWebHost over CreateWebHostBuilder for backwards
|
||||
// compatibility with existing projects that follow the old pattern.
|
||||
var findResult = ResolveWebHostBuilderFactory(assembly);
|
||||
var findResult = ResolveWebHostBuilderFactory<TWebhost, TWebhostBuilder>(assembly);
|
||||
switch (findResult.ResultKind)
|
||||
{
|
||||
case FactoryResolutionResultKind.NoEntryPoint:
|
||||
|
|
@ -47,11 +47,11 @@ namespace Microsoft.AspNetCore.Hosting.WebHostBuilderFactory
|
|||
return findResult;
|
||||
}
|
||||
|
||||
return FactoryResolutionResult.NoBuildWebHost(findResult.ProgramType);
|
||||
return FactoryResolutionResult<TWebhost, TWebhostBuilder>.NoBuildWebHost(findResult.ProgramType);
|
||||
}
|
||||
else
|
||||
{
|
||||
return FactoryResolutionResult.Succeded(args => (IWebHost)buildWebHostMethod.Invoke(null, new object[] { args }), findResult.ProgramType);
|
||||
return FactoryResolutionResult<TWebhost, TWebhostBuilder>.Succeded(args => (TWebhost)buildWebHostMethod.Invoke(null, new object[] { args }), findResult.ProgramType);
|
||||
}
|
||||
case FactoryResolutionResultKind.NoBuildWebHost:
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.TestHost
|
|||
{
|
||||
public static IWebHostBuilder CreateFromAssemblyEntryPoint(Assembly assembly, string [] args)
|
||||
{
|
||||
var result = WebHostFactoryResolver.ResolveWebHostBuilderFactory(assembly);
|
||||
var result = WebHostFactoryResolver.ResolveWebHostBuilderFactory<IWebHost,IWebHostBuilder>(assembly);
|
||||
if (result.ResultKind != FactoryResolutionResultKind.Success)
|
||||
{
|
||||
return null;
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Hosting.WebHostBuilderFactory.Tests
|
|||
public void CanFindWebHostBuilder_CreateWebHostBuilderPattern()
|
||||
{
|
||||
// Arrange & Act
|
||||
var resolverResult = WebHostFactoryResolver.ResolveWebHostBuilderFactory(typeof(IStartupInjectionAssemblyName.Startup).Assembly);
|
||||
var resolverResult = WebHostFactoryResolver.ResolveWebHostBuilderFactory<IWebHost,IWebHostBuilder>(typeof(IStartupInjectionAssemblyName.Startup).Assembly);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(FactoryResolutionResultKind.Success, resolverResult.ResultKind);
|
||||
|
|
@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Hosting.WebHostBuilderFactory.Tests
|
|||
public void CanFindWebHost_CreateWebHostBuilderPattern()
|
||||
{
|
||||
// Arrange & Act
|
||||
var resolverResult = WebHostFactoryResolver.ResolveWebHostFactory(typeof(IStartupInjectionAssemblyName.Startup).Assembly);
|
||||
var resolverResult = WebHostFactoryResolver.ResolveWebHostFactory<IWebHost, IWebHostBuilder>(typeof(IStartupInjectionAssemblyName.Startup).Assembly);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(FactoryResolutionResultKind.Success, resolverResult.ResultKind);
|
||||
|
|
@ -37,7 +37,7 @@ namespace Microsoft.AspNetCore.Hosting.WebHostBuilderFactory.Tests
|
|||
public void CanNotFindWebHostBuilder_BuildWebHostPattern()
|
||||
{
|
||||
// Arrange & Act
|
||||
var resolverResult = WebHostFactoryResolver.ResolveWebHostBuilderFactory(typeof(BuildWebHostPatternTestSite.Startup).Assembly);
|
||||
var resolverResult = WebHostFactoryResolver.ResolveWebHostBuilderFactory<IWebHost, IWebHostBuilder>(typeof(BuildWebHostPatternTestSite.Startup).Assembly);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(FactoryResolutionResultKind.NoCreateWebHostBuilder, resolverResult.ResultKind);
|
||||
|
|
@ -49,7 +49,7 @@ namespace Microsoft.AspNetCore.Hosting.WebHostBuilderFactory.Tests
|
|||
public void CanFindWebHost_BuildWebHostPattern()
|
||||
{
|
||||
// Arrange & Act
|
||||
var resolverResult = WebHostFactoryResolver.ResolveWebHostFactory(typeof(BuildWebHostPatternTestSite.Startup).Assembly);
|
||||
var resolverResult = WebHostFactoryResolver.ResolveWebHostFactory<IWebHost, IWebHostBuilder>(typeof(BuildWebHostPatternTestSite.Startup).Assembly);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(FactoryResolutionResultKind.Success, resolverResult.ResultKind);
|
||||
|
|
|
|||
Loading…
Reference in New Issue