diff --git a/src/Orchard.Tests/Environment/Extensions/ExtensionLoaderCoordinatorTests.cs b/src/Orchard.Tests/Environment/Extensions/ExtensionLoaderCoordinatorTests.cs index f468ef868..f5527bb79 100644 --- a/src/Orchard.Tests/Environment/Extensions/ExtensionLoaderCoordinatorTests.cs +++ b/src/Orchard.Tests/Environment/Extensions/ExtensionLoaderCoordinatorTests.cs @@ -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 monitor) { + throw new NotImplementedException(); + } + + public string GetWebFormAssemblyDirective(DependencyDescriptor dependency) { + throw new NotImplementedException(); + } + + public IEnumerable GetWebFormVirtualDependencies(DependencyDescriptor dependency) { + throw new NotImplementedException(); + } + #endregion } diff --git a/src/Orchard.Tests/Environment/Extensions/ExtensionManagerTests.cs b/src/Orchard.Tests/Environment/Extensions/ExtensionManagerTests.cs index 978beb16a..6b1ecc127 100644 --- a/src/Orchard.Tests/Environment/Extensions/ExtensionManagerTests.cs +++ b/src/Orchard.Tests/Environment/Extensions/ExtensionManagerTests.cs @@ -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 monitor) { + throw new NotImplementedException(); + } + + public string GetWebFormAssemblyDirective(DependencyDescriptor dependency) { + throw new NotImplementedException(); + } + + public IEnumerable GetWebFormVirtualDependencies(DependencyDescriptor dependency) { + throw new NotImplementedException(); + } + #endregion } diff --git a/src/Orchard/Environment/Extensions/Loaders/AreaExtensionLoader.cs b/src/Orchard/Environment/Extensions/Loaders/AreaExtensionLoader.cs index 0220e92fe..0890d6214 100644 --- a/src/Orchard/Environment/Extensions/Loaders/AreaExtensionLoader.cs +++ b/src/Orchard/Environment/Extensions/Loaders/AreaExtensionLoader.cs @@ -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) { diff --git a/src/Orchard/Environment/Extensions/Loaders/CoreExtensionLoader.cs b/src/Orchard/Environment/Extensions/Loaders/CoreExtensionLoader.cs index 260488009..100fc3485 100644 --- a/src/Orchard/Environment/Extensions/Loaders/CoreExtensionLoader.cs +++ b/src/Orchard/Environment/Extensions/Loaders/CoreExtensionLoader.cs @@ -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) { diff --git a/src/Orchard/Environment/Extensions/Loaders/DynamicExtensionLoader.cs b/src/Orchard/Environment/Extensions/Loaders/DynamicExtensionLoader.cs index 37e497123..cbef6204c 100644 --- a/src/Orchard/Environment/Extensions/Loaders/DynamicExtensionLoader.cs +++ b/src/Orchard/Environment/Extensions/Loaders/DynamicExtensionLoader.cs @@ -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) { diff --git a/src/Orchard/Environment/Extensions/Loaders/ExtensionLoaderBase.cs b/src/Orchard/Environment/Extensions/Loaders/ExtensionLoaderBase.cs index f7214e508..987ebfc6d 100644 --- a/src/Orchard/Environment/Extensions/Loaders/ExtensionLoaderBase.cs +++ b/src/Orchard/Environment/Extensions/Loaders/ExtensionLoaderBase.cs @@ -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 monitor) { } + public abstract ExtensionEntry LoadWorker(ExtensionDescriptor descriptor); + public virtual string GetWebFormAssemblyDirective(DependencyDescriptor dependency) { return null; } diff --git a/src/Orchard/Environment/Extensions/Loaders/PrecompiledExtensionLoader.cs b/src/Orchard/Environment/Extensions/Loaders/PrecompiledExtensionLoader.cs index fbb5a241c..3baceaecd 100644 --- a/src/Orchard/Environment/Extensions/Loaders/PrecompiledExtensionLoader.cs +++ b/src/Orchard/Environment/Extensions/Loaders/PrecompiledExtensionLoader.cs @@ -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) { diff --git a/src/Orchard/Environment/Extensions/Loaders/ProbingExtensionLoader.cs b/src/Orchard/Environment/Extensions/Loaders/ProbingExtensionLoader.cs index 0016a0f32..78483312c 100644 --- a/src/Orchard/Environment/Extensions/Loaders/ProbingExtensionLoader.cs +++ b/src/Orchard/Environment/Extensions/Loaders/ProbingExtensionLoader.cs @@ -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() + }; } } } \ No newline at end of file diff --git a/src/Orchard/Environment/Extensions/Loaders/ReferencedExtensionLoader.cs b/src/Orchard/Environment/Extensions/Loaders/ReferencedExtensionLoader.cs index 4b68ca846..a80ef22b8 100644 --- a/src/Orchard/Environment/Extensions/Loaders/ReferencedExtensionLoader.cs +++ b/src/Orchard/Environment/Extensions/Loaders/ReferencedExtensionLoader.cs @@ -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() + .FirstOrDefault(x => x.GetName().Name == descriptor.Name); - var assembly = BuildManager.GetReferencedAssemblies() - .OfType() - .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() + }; } } }