mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Slightly refactor ExtensionLoader.Load method implementations
--HG-- branch : dev
This commit is contained in:
@@ -3,10 +3,12 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Autofac;
|
||||
using NUnit.Framework;
|
||||
using Orchard.Caching;
|
||||
using Orchard.Environment.Extensions;
|
||||
using Orchard.Environment.Extensions.Folders;
|
||||
using Orchard.Environment.Extensions.Loaders;
|
||||
using Orchard.Environment.Extensions.Models;
|
||||
using Orchard.FileSystems.Dependencies;
|
||||
using Orchard.Tests.Extensions.ExtensionTypes;
|
||||
|
||||
namespace Orchard.Tests.Environment.Extensions {
|
||||
@@ -43,21 +45,49 @@ namespace Orchard.Tests.Environment.Extensions {
|
||||
}
|
||||
}
|
||||
|
||||
public class StubLoaders : ExtensionLoaderBase {
|
||||
public class StubLoaders : IExtensionLoader {
|
||||
#region Implementation of IExtensionLoader
|
||||
|
||||
public override int Order {
|
||||
public int Order {
|
||||
get { return 1; }
|
||||
}
|
||||
|
||||
public override ExtensionProbeEntry Probe(ExtensionDescriptor descriptor) {
|
||||
public string Name {
|
||||
get { return this.GetType().Name; }
|
||||
}
|
||||
|
||||
public ExtensionProbeEntry Probe(ExtensionDescriptor descriptor) {
|
||||
return new ExtensionProbeEntry { Descriptor = descriptor, Loader = this };
|
||||
}
|
||||
|
||||
public override ExtensionEntry Load(ExtensionDescriptor descriptor) {
|
||||
public ExtensionEntry Load(ExtensionDescriptor descriptor) {
|
||||
return new ExtensionEntry { Descriptor = descriptor, ExportedTypes = new[] { typeof(Alpha), typeof(Beta), typeof(Phi) } };
|
||||
}
|
||||
|
||||
public void ExtensionActivated(ExtensionLoadingContext ctx, bool isNewExtension, ExtensionDescriptor extension) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void ExtensionDeactivated(ExtensionLoadingContext ctx, bool isNewExtension, ExtensionDescriptor extension) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void ExtensionRemoved(ExtensionLoadingContext ctx, DependencyDescriptor dependency) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void Monitor(ExtensionDescriptor extension, Action<IVolatileToken> monitor) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public string GetWebFormAssemblyDirective(DependencyDescriptor dependency) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public IEnumerable<string> GetWebFormVirtualDependencies(DependencyDescriptor dependency) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
|
@@ -3,10 +3,12 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Autofac;
|
||||
using NUnit.Framework;
|
||||
using Orchard.Caching;
|
||||
using Orchard.Environment.Extensions;
|
||||
using Orchard.Environment.Extensions.Folders;
|
||||
using Orchard.Environment.Extensions.Loaders;
|
||||
using Orchard.Environment.Extensions.Models;
|
||||
using Orchard.FileSystems.Dependencies;
|
||||
using Orchard.Tests.Extensions.ExtensionTypes;
|
||||
|
||||
namespace Orchard.Tests.Environment.Extensions {
|
||||
@@ -42,21 +44,49 @@ namespace Orchard.Tests.Environment.Extensions {
|
||||
}
|
||||
}
|
||||
|
||||
public class StubLoaders : ExtensionLoaderBase {
|
||||
public class StubLoaders : IExtensionLoader {
|
||||
#region Implementation of IExtensionLoader
|
||||
|
||||
public override int Order {
|
||||
public int Order {
|
||||
get { return 1; }
|
||||
}
|
||||
|
||||
public override ExtensionProbeEntry Probe(ExtensionDescriptor descriptor) {
|
||||
public string Name {
|
||||
get { throw new NotImplementedException(); }
|
||||
}
|
||||
|
||||
public ExtensionProbeEntry Probe(ExtensionDescriptor descriptor) {
|
||||
return new ExtensionProbeEntry { Descriptor = descriptor, Loader = this };
|
||||
}
|
||||
|
||||
public override ExtensionEntry Load(ExtensionDescriptor descriptor) {
|
||||
public ExtensionEntry Load(ExtensionDescriptor descriptor) {
|
||||
return new ExtensionEntry { Descriptor = descriptor, ExportedTypes = new[] { typeof(Alpha), typeof(Beta), typeof(Phi) } };
|
||||
}
|
||||
|
||||
public void ExtensionActivated(ExtensionLoadingContext ctx, bool isNewExtension, ExtensionDescriptor extension) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void ExtensionDeactivated(ExtensionLoadingContext ctx, bool isNewExtension, ExtensionDescriptor extension) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void ExtensionRemoved(ExtensionLoadingContext ctx, DependencyDescriptor dependency) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void Monitor(ExtensionDescriptor extension, Action<IVolatileToken> monitor) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public string GetWebFormAssemblyDirective(DependencyDescriptor dependency) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public IEnumerable<string> GetWebFormVirtualDependencies(DependencyDescriptor dependency) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
|
@@ -10,7 +10,8 @@ namespace Orchard.Environment.Extensions.Loaders {
|
||||
public class AreaExtensionLoader : ExtensionLoaderBase {
|
||||
private readonly IDependenciesFolder _dependenciesFolder;
|
||||
|
||||
public AreaExtensionLoader(IDependenciesFolder dependenciesFolder) {
|
||||
public AreaExtensionLoader(IDependenciesFolder dependenciesFolder)
|
||||
: base(dependenciesFolder) {
|
||||
_dependenciesFolder = dependenciesFolder;
|
||||
Logger = NullLogger.Instance;
|
||||
}
|
||||
@@ -31,20 +32,16 @@ namespace Orchard.Environment.Extensions.Loaders {
|
||||
return null;
|
||||
}
|
||||
|
||||
public override ExtensionEntry Load(ExtensionDescriptor descriptor) {
|
||||
var dependency = _dependenciesFolder.GetDescriptor(descriptor.Name);
|
||||
if (dependency != null && dependency.LoaderName == this.Name) {
|
||||
Logger.Information("Loading extension \"{0}\"", dependency.Name);
|
||||
public override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
|
||||
Logger.Information("Loading extension \"{0}\"", descriptor.Name);
|
||||
|
||||
var assembly = Assembly.Load("Orchard.Web");
|
||||
var assembly = Assembly.Load("Orchard.Web");
|
||||
|
||||
return new ExtensionEntry {
|
||||
Descriptor = descriptor,
|
||||
Assembly = assembly,
|
||||
ExportedTypes = assembly.GetExportedTypes().Where(x => IsTypeFromModule(x, descriptor))
|
||||
};
|
||||
}
|
||||
return null;
|
||||
return new ExtensionEntry {
|
||||
Descriptor = descriptor,
|
||||
Assembly = assembly,
|
||||
ExportedTypes = assembly.GetExportedTypes().Where(x => IsTypeFromModule(x, descriptor))
|
||||
};
|
||||
}
|
||||
|
||||
private static bool IsTypeFromModule(Type type, ExtensionDescriptor descriptor) {
|
||||
|
@@ -14,7 +14,8 @@ namespace Orchard.Environment.Extensions.Loaders {
|
||||
public class CoreExtensionLoader : ExtensionLoaderBase {
|
||||
private readonly IDependenciesFolder _dependenciesFolder;
|
||||
|
||||
public CoreExtensionLoader(IDependenciesFolder dependenciesFolder) {
|
||||
public CoreExtensionLoader(IDependenciesFolder dependenciesFolder)
|
||||
: base(dependenciesFolder) {
|
||||
_dependenciesFolder = dependenciesFolder;
|
||||
Logger = NullLogger.Instance;
|
||||
}
|
||||
@@ -35,20 +36,16 @@ namespace Orchard.Environment.Extensions.Loaders {
|
||||
return null;
|
||||
}
|
||||
|
||||
public override ExtensionEntry Load(ExtensionDescriptor descriptor) {
|
||||
var dependency = _dependenciesFolder.GetDescriptor(descriptor.Name);
|
||||
if (dependency != null && dependency.LoaderName == this.Name) {
|
||||
Logger.Information("Loading extension \"{0}\"", dependency.Name);
|
||||
public override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
|
||||
Logger.Information("Loading extension \"{0}\"", descriptor.Name);
|
||||
|
||||
var assembly = Assembly.Load("Orchard.Core");
|
||||
var assembly = Assembly.Load("Orchard.Core");
|
||||
|
||||
return new ExtensionEntry {
|
||||
Descriptor = descriptor,
|
||||
Assembly = assembly,
|
||||
ExportedTypes = assembly.GetExportedTypes().Where(x => IsTypeFromModule(x, descriptor))
|
||||
};
|
||||
}
|
||||
return null;
|
||||
return new ExtensionEntry {
|
||||
Descriptor = descriptor,
|
||||
Assembly = assembly,
|
||||
ExportedTypes = assembly.GetExportedTypes().Where(x => IsTypeFromModule(x, descriptor))
|
||||
};
|
||||
}
|
||||
|
||||
private static bool IsTypeFromModule(Type type, ExtensionDescriptor descriptor) {
|
||||
|
@@ -18,7 +18,8 @@ namespace Orchard.Environment.Extensions.Loaders {
|
||||
IBuildManager buildManager,
|
||||
IVirtualPathProvider virtualPathProvider,
|
||||
IVirtualPathMonitor virtualPathMonitor,
|
||||
IDependenciesFolder dependenciesFolder) {
|
||||
IDependenciesFolder dependenciesFolder)
|
||||
: base(dependenciesFolder) {
|
||||
|
||||
_buildManager = buildManager;
|
||||
_virtualPathProvider = virtualPathProvider;
|
||||
@@ -75,20 +76,19 @@ namespace Orchard.Environment.Extensions.Loaders {
|
||||
};
|
||||
}
|
||||
|
||||
public override ExtensionEntry Load(ExtensionDescriptor descriptor) {
|
||||
var dependency = _dependenciesFolder.GetDescriptor(descriptor.Name);
|
||||
if (dependency != null && dependency.LoaderName == this.Name) {
|
||||
public override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
|
||||
string projectPath = GetProjectPath(descriptor);
|
||||
if (projectPath == null)
|
||||
return null;
|
||||
|
||||
var assembly = _buildManager.GetCompiledAssembly(dependency.VirtualPath);
|
||||
Logger.Information("Loading extension \"{0}\": assembly name=\"{1}\"", dependency.Name, assembly.GetName().Name);
|
||||
var assembly = _buildManager.GetCompiledAssembly(projectPath);
|
||||
Logger.Information("Loading extension \"{0}\": assembly name=\"{1}\"", descriptor.Name, assembly.GetName().Name);
|
||||
|
||||
return new ExtensionEntry {
|
||||
Descriptor = descriptor,
|
||||
Assembly = assembly,
|
||||
ExportedTypes = assembly.GetExportedTypes(),
|
||||
};
|
||||
}
|
||||
return null;
|
||||
return new ExtensionEntry {
|
||||
Descriptor = descriptor,
|
||||
Assembly = assembly,
|
||||
ExportedTypes = assembly.GetExportedTypes(),
|
||||
};
|
||||
}
|
||||
|
||||
private string GetProjectPath(ExtensionDescriptor descriptor) {
|
||||
|
@@ -7,17 +7,32 @@ using Orchard.FileSystems.Dependencies;
|
||||
|
||||
namespace Orchard.Environment.Extensions.Loaders {
|
||||
public abstract class ExtensionLoaderBase : IExtensionLoader {
|
||||
private readonly IDependenciesFolder _dependenciesFolder;
|
||||
|
||||
protected ExtensionLoaderBase(IDependenciesFolder dependenciesFolder) {
|
||||
_dependenciesFolder = dependenciesFolder;
|
||||
}
|
||||
|
||||
public abstract int Order { get; }
|
||||
public string Name { get { return this.GetType().Name; } }
|
||||
|
||||
public abstract ExtensionProbeEntry Probe(ExtensionDescriptor descriptor);
|
||||
public abstract ExtensionEntry Load(ExtensionDescriptor descriptor);
|
||||
|
||||
public virtual void ExtensionActivated(ExtensionLoadingContext ctx, bool isNewExtension, ExtensionDescriptor extension) {}
|
||||
public virtual void ExtensionDeactivated(ExtensionLoadingContext ctx, bool isNewExtension, ExtensionDescriptor extension){}
|
||||
public ExtensionEntry Load(ExtensionDescriptor descriptor) {
|
||||
var dependency = _dependenciesFolder.GetDescriptor(descriptor.Name);
|
||||
if (dependency != null && dependency.LoaderName == this.Name) {
|
||||
return LoadWorker(descriptor);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public virtual void ExtensionActivated(ExtensionLoadingContext ctx, bool isNewExtension, ExtensionDescriptor extension) { }
|
||||
public virtual void ExtensionDeactivated(ExtensionLoadingContext ctx, bool isNewExtension, ExtensionDescriptor extension) { }
|
||||
public virtual void ExtensionRemoved(ExtensionLoadingContext ctx, DependencyDescriptor dependency) { }
|
||||
public virtual void Monitor(ExtensionDescriptor extension, Action<IVolatileToken> monitor) { }
|
||||
|
||||
public abstract ExtensionEntry LoadWorker(ExtensionDescriptor descriptor);
|
||||
|
||||
public virtual string GetWebFormAssemblyDirective(DependencyDescriptor dependency) {
|
||||
return null;
|
||||
}
|
||||
|
@@ -18,7 +18,12 @@ namespace Orchard.Environment.Extensions.Loaders {
|
||||
private readonly IVirtualPathProvider _virtualPathProvider;
|
||||
private readonly IVirtualPathMonitor _virtualPathMonitor;
|
||||
|
||||
public PrecompiledExtensionLoader(IDependenciesFolder dependenciesFolder, IAssemblyProbingFolder assemblyProbingFolder, IVirtualPathProvider virtualPathProvider, IVirtualPathMonitor virtualPathMonitor) {
|
||||
public PrecompiledExtensionLoader(IDependenciesFolder dependenciesFolder,
|
||||
IAssemblyProbingFolder assemblyProbingFolder,
|
||||
IVirtualPathProvider virtualPathProvider,
|
||||
IVirtualPathMonitor virtualPathMonitor)
|
||||
: base(dependenciesFolder) {
|
||||
|
||||
_dependenciesFolder = dependenciesFolder;
|
||||
_assemblyProbingFolder = assemblyProbingFolder;
|
||||
_virtualPathProvider = virtualPathProvider;
|
||||
@@ -101,23 +106,18 @@ namespace Orchard.Environment.Extensions.Loaders {
|
||||
};
|
||||
}
|
||||
|
||||
public override ExtensionEntry Load(ExtensionDescriptor descriptor) {
|
||||
var dependency = _dependenciesFolder.GetDescriptor(descriptor.Name);
|
||||
if (dependency != null && dependency.LoaderName == this.Name) {
|
||||
public override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
|
||||
var assembly = _assemblyProbingFolder.LoadAssembly(descriptor.Name);
|
||||
if (assembly == null)
|
||||
return null;
|
||||
|
||||
var assembly = _assemblyProbingFolder.LoadAssembly(descriptor.Name);
|
||||
if (assembly == null)
|
||||
return null;
|
||||
Logger.Information("Loading extension \"{0}\"", descriptor.Name);
|
||||
|
||||
Logger.Information("Loading extension \"{0}\"", dependency.Name);
|
||||
|
||||
return new ExtensionEntry {
|
||||
Descriptor = descriptor,
|
||||
Assembly = assembly,
|
||||
ExportedTypes = assembly.GetExportedTypes()
|
||||
};
|
||||
}
|
||||
return null;
|
||||
return new ExtensionEntry {
|
||||
Descriptor = descriptor,
|
||||
Assembly = assembly,
|
||||
ExportedTypes = assembly.GetExportedTypes()
|
||||
};
|
||||
}
|
||||
|
||||
public string GetAssemblyPath(ExtensionDescriptor descriptor) {
|
||||
|
@@ -13,7 +13,9 @@ namespace Orchard.Environment.Extensions.Loaders {
|
||||
private readonly IDependenciesFolder _dependenciesFolder;
|
||||
private readonly IAssemblyProbingFolder _assemblyProbingFolder;
|
||||
|
||||
public ProbingExtensionLoader(IDependenciesFolder dependenciesFolder, IAssemblyProbingFolder assemblyProbingFolder) {
|
||||
public ProbingExtensionLoader(IDependenciesFolder dependenciesFolder, IAssemblyProbingFolder assemblyProbingFolder)
|
||||
: base(dependenciesFolder) {
|
||||
|
||||
_dependenciesFolder = dependenciesFolder;
|
||||
_assemblyProbingFolder = assemblyProbingFolder;
|
||||
Logger = NullLogger.Instance;
|
||||
@@ -64,30 +66,25 @@ namespace Orchard.Environment.Extensions.Loaders {
|
||||
return null;
|
||||
|
||||
return new ExtensionProbeEntry {
|
||||
Descriptor = descriptor,
|
||||
LastModificationTimeUtc = _assemblyProbingFolder.GetAssemblyDateTimeUtc(descriptor.Name),
|
||||
Loader = this,
|
||||
VirtualPath = desc.VirtualPath
|
||||
};
|
||||
Descriptor = descriptor,
|
||||
LastModificationTimeUtc = _assemblyProbingFolder.GetAssemblyDateTimeUtc(descriptor.Name),
|
||||
Loader = this,
|
||||
VirtualPath = desc.VirtualPath
|
||||
};
|
||||
}
|
||||
|
||||
public override ExtensionEntry Load(ExtensionDescriptor descriptor) {
|
||||
var dependency = _dependenciesFolder.GetDescriptor(descriptor.Name);
|
||||
if (dependency != null && dependency.LoaderName == this.Name) {
|
||||
public override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
|
||||
var assembly = _assemblyProbingFolder.LoadAssembly(descriptor.Name);
|
||||
if (assembly == null)
|
||||
return null;
|
||||
|
||||
var assembly = _assemblyProbingFolder.LoadAssembly(descriptor.Name);
|
||||
if (assembly == null)
|
||||
return null;
|
||||
Logger.Information("Loading extension \"{0}\"", descriptor.Name);
|
||||
|
||||
Logger.Information("Loading extension \"{0}\"", dependency.Name);
|
||||
|
||||
return new ExtensionEntry {
|
||||
Descriptor = descriptor,
|
||||
Assembly = assembly,
|
||||
ExportedTypes = assembly.GetExportedTypes()
|
||||
};
|
||||
}
|
||||
return null;
|
||||
return new ExtensionEntry {
|
||||
Descriptor = descriptor,
|
||||
Assembly = assembly,
|
||||
ExportedTypes = assembly.GetExportedTypes()
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
@@ -16,7 +16,9 @@ namespace Orchard.Environment.Extensions.Loaders {
|
||||
private readonly IDependenciesFolder _dependenciesFolder;
|
||||
private readonly IVirtualPathProvider _virtualPathProvider;
|
||||
|
||||
public ReferencedExtensionLoader(IDependenciesFolder dependenciesFolder, IVirtualPathProvider virtualPathProvider) {
|
||||
public ReferencedExtensionLoader(IDependenciesFolder dependenciesFolder, IVirtualPathProvider virtualPathProvider)
|
||||
: base(dependenciesFolder) {
|
||||
|
||||
_dependenciesFolder = dependenciesFolder;
|
||||
_virtualPathProvider = virtualPathProvider;
|
||||
Logger = NullLogger.Instance;
|
||||
@@ -52,29 +54,24 @@ namespace Orchard.Environment.Extensions.Loaders {
|
||||
};
|
||||
}
|
||||
|
||||
public override ExtensionEntry Load(ExtensionDescriptor descriptor) {
|
||||
public override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
|
||||
if (HostingEnvironment.IsHosted == false)
|
||||
return null;
|
||||
|
||||
var dependency = _dependenciesFolder.GetDescriptor(descriptor.Name);
|
||||
if (dependency != null && dependency.LoaderName == this.Name) {
|
||||
var assembly = BuildManager.GetReferencedAssemblies()
|
||||
.OfType<Assembly>()
|
||||
.FirstOrDefault(x => x.GetName().Name == descriptor.Name);
|
||||
|
||||
var assembly = BuildManager.GetReferencedAssemblies()
|
||||
.OfType<Assembly>()
|
||||
.FirstOrDefault(x => x.GetName().Name == descriptor.Name);
|
||||
if (assembly == null)
|
||||
return null;
|
||||
|
||||
if (assembly == null)
|
||||
return null;
|
||||
Logger.Information("Loading extension \"{0}\"", descriptor.Name);
|
||||
|
||||
Logger.Information("Loading extension \"{0}\"", dependency.Name);
|
||||
|
||||
return new ExtensionEntry {
|
||||
Descriptor = descriptor,
|
||||
Assembly = assembly,
|
||||
ExportedTypes = assembly.GetExportedTypes()
|
||||
};
|
||||
}
|
||||
return null;
|
||||
return new ExtensionEntry {
|
||||
Descriptor = descriptor,
|
||||
Assembly = assembly,
|
||||
ExportedTypes = assembly.GetExportedTypes()
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user