Removing "ProbingExtensionLoader"

It's redudant with PrecompiledExtensionLoader and was not
fully implemented, causing bug http://orchard.codeplex.com/workitem/16572.

--HG--
branch : dev
This commit is contained in:
Renaud Paquay
2010-10-04 15:10:54 -07:00
parent ce208c44f2
commit 9e8cbd4f01
4 changed files with 1 additions and 118 deletions

View File

@@ -8,7 +8,7 @@ using Orchard.FileSystems.Dependencies;
namespace Orchard.Environment.Extensions.Loaders {
public abstract class ExtensionLoaderBase : IExtensionLoader {
protected readonly IDependenciesFolder _dependenciesFolder;
private readonly IDependenciesFolder _dependenciesFolder;
protected ExtensionLoaderBase(IDependenciesFolder dependenciesFolder) {
_dependenciesFolder = dependenciesFolder;

View File

@@ -1,115 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Orchard.Environment.Extensions.Models;
using Orchard.FileSystems.Dependencies;
using Orchard.Logging;
namespace Orchard.Environment.Extensions.Loaders {
/// <summary>
/// Load an extension using the "Assembly.Load" method if the
/// file can be found in the "App_Data/Dependencies" folder.
/// </summary>
public class ProbingExtensionLoader : ExtensionLoaderBase {
private readonly IHostEnvironment _hostEnvironment;
private readonly IDependenciesFolder _dependenciesFolder;
private readonly IAssemblyProbingFolder _assemblyProbingFolder;
public ProbingExtensionLoader(
IHostEnvironment hostEnvironment,
IDependenciesFolder dependenciesFolder,
IAssemblyProbingFolder assemblyProbingFolder)
: base(dependenciesFolder) {
_hostEnvironment = hostEnvironment;
_dependenciesFolder = dependenciesFolder;
_assemblyProbingFolder = assemblyProbingFolder;
Logger = NullLogger.Instance;
}
public ILogger Logger { get; set; }
public override int Order { get { return 40; } }
public override string GetWebFormAssemblyDirective(DependencyDescriptor dependency) {
return string.Format("<%@ Assembly Name=\"{0}\"%>", dependency.Name);
}
public override IEnumerable<string> GetWebFormVirtualDependencies(DependencyDescriptor dependency) {
yield return _assemblyProbingFolder.GetAssemblyVirtualPath(dependency.Name);
}
public override void ExtensionRemoved(ExtensionLoadingContext ctx, DependencyDescriptor dependency) {
if (_assemblyProbingFolder.AssemblyExists(dependency.Name)) {
ctx.DeleteActions.Add(
() => {
Logger.Information("ExtensionRemoved: Deleting assembly \"{0}\" from probing directory", dependency.Name);
_assemblyProbingFolder.DeleteAssembly(dependency.Name);
});
// We need to restart the appDomain if the assembly is loaded
if (_hostEnvironment.IsAssemblyLoaded(dependency.Name)) {
Logger.Information("ExtensionRemoved: Module \"{0}\" is removed and its assembly is loaded, forcing AppDomain restart", dependency.Name);
ctx.RestartAppDomain = true;
}
}
}
public override void ExtensionDeactivated(ExtensionLoadingContext ctx, ExtensionDescriptor extension) {
if (_assemblyProbingFolder.AssemblyExists(extension.Name)) {
ctx.DeleteActions.Add(
() => {
Logger.Information("ExtensionDeactivated: Deleting assembly \"{0}\" from probing directory", extension.Name);
_assemblyProbingFolder.DeleteAssembly(extension.Name);
});
// We need to restart the appDomain if the assembly is loaded
if (_hostEnvironment.IsAssemblyLoaded(extension.Name)) {
Logger.Information("ExtensionDeactivated: Module \"{0}\" is deactivated and its assembly is loaded, forcing AppDomain restart", extension.Name);
ctx.RestartAppDomain = true;
}
}
}
public override bool IsCompatibleWithModuleReferences(ExtensionDescriptor extension, IEnumerable<ExtensionProbeEntry> references) {
// A pre-compiled module is _not_ compatible with a dynamically loaded module
// because a pre-compiled module usually references a pre-compiled assembly binary
// which will have a different identity (i.e. name) from the dynamic module.
bool result = references.All(r => r.Loader.GetType() != typeof(DynamicExtensionLoader));
if (!result) {
Logger.Information("Extension \"{0}\" will not be loaded as pre-compiled extension because one or more referenced extension is dynamically compiled", extension.Name);
}
return result;
}
public override ExtensionProbeEntry Probe(ExtensionDescriptor descriptor) {
if (!_assemblyProbingFolder.AssemblyExists(descriptor.Name))
return null;
var desc = _dependenciesFolder.GetDescriptor(descriptor.Name);
if ( desc == null )
return null;
return new ExtensionProbeEntry {
Descriptor = descriptor,
LastWriteTimeUtc = _assemblyProbingFolder.GetAssemblyDateTimeUtc(descriptor.Name),
Loader = this,
VirtualPath = desc.VirtualPath
};
}
protected override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
var assembly = _assemblyProbingFolder.LoadAssembly(descriptor.Name);
if (assembly == null)
return null;
//Logger.Information("Loading extension \"{0}\"", descriptor.Name);
return new ExtensionEntry {
Descriptor = descriptor,
Assembly = assembly,
ExportedTypes = assembly.GetExportedTypes()
};
}
}
}

View File

@@ -80,7 +80,6 @@ namespace Orchard.Environment {
builder.RegisterType<CoreExtensionLoader>().As<IExtensionLoader>().SingleInstance();
builder.RegisterType<ReferencedExtensionLoader>().As<IExtensionLoader>().SingleInstance();
builder.RegisterType<PrecompiledExtensionLoader>().As<IExtensionLoader>().SingleInstance();
builder.RegisterType<ProbingExtensionLoader>().As<IExtensionLoader>().SingleInstance();
builder.RegisterType<DynamicExtensionLoader>().As<IExtensionLoader>().SingleInstance();
builder.RegisterType<RawThemeExtensionLoader>().As<IExtensionLoader>().SingleInstance();
}

View File

@@ -546,7 +546,6 @@
<Compile Include="Environment\IHostEnvironment.cs" />
<Compile Include="FileSystems\VirtualPath\IVirtualPathMonitor.cs" />
<Compile Include="FileSystems\Dependencies\IDependenciesFolder.cs" />
<Compile Include="Environment\Extensions\Loaders\ProbingExtensionLoader.cs" />
<Compile Include="Environment\Extensions\Compilers\IExtensionCompiler.cs" />
<Compile Include="Environment\Extensions\Compilers\CSharpExtensionDirectoryCompiler.cs" />
<Compile Include="Environment\Extensions\Compilers\DefaultExtensionCompiler.cs" />