Simplify server loader logic
This commit is contained in:
parent
5621a2c2c7
commit
bf6e293bfe
|
|
@ -10,19 +10,6 @@ namespace Microsoft.AspNet.Hosting.Internal
|
||||||
{
|
{
|
||||||
public static class HostingUtilities
|
public static class HostingUtilities
|
||||||
{
|
{
|
||||||
internal static Tuple<string, string> SplitTypeName(string identifier)
|
|
||||||
{
|
|
||||||
string typeName = null;
|
|
||||||
var assemblyName = identifier.Trim();
|
|
||||||
var parts = identifier.Split(new[] { ',' }, 2);
|
|
||||||
if (parts.Length == 2)
|
|
||||||
{
|
|
||||||
typeName = parts[0].Trim();
|
|
||||||
assemblyName = parts[1].Trim();
|
|
||||||
}
|
|
||||||
return new Tuple<string, string>(typeName, assemblyName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string GetWebRoot(string applicationBasePath)
|
public static string GetWebRoot(string applicationBasePath)
|
||||||
{
|
{
|
||||||
var webroot = applicationBasePath;
|
var webroot = applicationBasePath;
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,6 @@ namespace Microsoft.AspNet.Hosting.Server
|
||||||
{
|
{
|
||||||
public interface IServerLoader
|
public interface IServerLoader
|
||||||
{
|
{
|
||||||
IServerFactory LoadServerFactory(string serverName);
|
IServerFactory LoadServerFactory(string assemblyName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -4,8 +4,8 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Microsoft.AspNet.Hosting.Internal;
|
|
||||||
using Microsoft.Framework.DependencyInjection;
|
using Microsoft.Framework.DependencyInjection;
|
||||||
|
using Microsoft.Framework.Internal;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Hosting.Server
|
namespace Microsoft.AspNet.Hosting.Server
|
||||||
{
|
{
|
||||||
|
|
@ -18,59 +18,29 @@ namespace Microsoft.AspNet.Hosting.Server
|
||||||
_services = services;
|
_services = services;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IServerFactory LoadServerFactory(string serverFactoryIdentifier)
|
public IServerFactory LoadServerFactory([NotNull] string assemblyName)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(serverFactoryIdentifier))
|
if (string.IsNullOrEmpty(assemblyName))
|
||||||
{
|
{
|
||||||
throw new ArgumentException(string.Empty, nameof(serverFactoryIdentifier));
|
throw new ArgumentException(string.Empty, nameof(assemblyName));
|
||||||
}
|
}
|
||||||
|
|
||||||
var nameParts = HostingUtilities.SplitTypeName(serverFactoryIdentifier);
|
|
||||||
var typeName = nameParts.Item1;
|
|
||||||
var assemblyName = nameParts.Item2;
|
|
||||||
|
|
||||||
var assembly = Assembly.Load(new AssemblyName(assemblyName));
|
var assembly = Assembly.Load(new AssemblyName(assemblyName));
|
||||||
if (assembly == null)
|
if (assembly == null)
|
||||||
{
|
{
|
||||||
throw new Exception(string.Format("The assembly {0} failed to load.", assemblyName));
|
throw new Exception(string.Format("The assembly {0} failed to load.", assemblyName));
|
||||||
}
|
}
|
||||||
|
|
||||||
Type type = null;
|
var serverTypeInfo = assembly.DefinedTypes.Where(
|
||||||
Type interfaceInfo;
|
t => t.ImplementedInterfaces.FirstOrDefault(interf => interf.Equals(typeof(IServerFactory))) != null)
|
||||||
if (string.IsNullOrEmpty(typeName))
|
.FirstOrDefault();
|
||||||
|
|
||||||
|
if (serverTypeInfo == null)
|
||||||
{
|
{
|
||||||
foreach (var typeInfo in assembly.DefinedTypes)
|
throw new InvalidOperationException($"No server type found that implements IServerFactory in assembly: {assemblyName}.");
|
||||||
{
|
|
||||||
interfaceInfo = typeInfo.ImplementedInterfaces.FirstOrDefault(interf => interf.Equals(typeof(IServerFactory)));
|
|
||||||
if (interfaceInfo != null)
|
|
||||||
{
|
|
||||||
type = typeInfo.AsType();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type == null)
|
|
||||||
{
|
|
||||||
throw new Exception(string.Format("The type {0} failed to load.", typeName ?? "<null>"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
type = assembly.GetType(typeName);
|
|
||||||
|
|
||||||
if (type == null)
|
|
||||||
{
|
|
||||||
throw new Exception(String.Format("The type {0} failed to load.", typeName ?? "<null>"));
|
|
||||||
}
|
|
||||||
|
|
||||||
interfaceInfo = type.GetTypeInfo().ImplementedInterfaces.FirstOrDefault(interf => interf.Equals(typeof(IServerFactory)));
|
|
||||||
|
|
||||||
if (interfaceInfo == null)
|
|
||||||
{
|
|
||||||
throw new Exception(string.Format("The type '{0}' does not implement the '{1}' interface.", type, typeof(IServerFactory).FullName));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return (IServerFactory)ActivatorUtilities.GetServiceOrCreateInstance(_services, type);
|
return (IServerFactory)ActivatorUtilities.GetServiceOrCreateInstance(_services, serverTypeInfo.AsType());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue