Replace all Assembly.Load usages

All Orchard components now use "IAssemblyLoader.Load" instead
of "Assembly.Load" for correctness.

--HG--
branch : perf
This commit is contained in:
Renaud Paquay
2010-11-10 15:04:49 -08:00
parent f4a9b0c63c
commit 1d6bb4d941
5 changed files with 23 additions and 25 deletions

View File

@@ -7,9 +7,11 @@ using Orchard.Logging;
namespace Orchard.Environment.Extensions.Loaders { namespace Orchard.Environment.Extensions.Loaders {
public class AreaExtensionLoader : ExtensionLoaderBase { public class AreaExtensionLoader : ExtensionLoaderBase {
private readonly IAssemblyLoader _assemblyLoader;
public AreaExtensionLoader(IDependenciesFolder dependenciesFolder) public AreaExtensionLoader(IDependenciesFolder dependenciesFolder, IAssemblyLoader assemblyLoader)
: base(dependenciesFolder) { : base(dependenciesFolder) {
_assemblyLoader = assemblyLoader;
Logger = NullLogger.Instance; Logger = NullLogger.Instance;
} }
@@ -33,7 +35,7 @@ namespace Orchard.Environment.Extensions.Loaders {
protected override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) { protected override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
//Logger.Information("Loading extension \"{0}\"", descriptor.Name); //Logger.Information("Loading extension \"{0}\"", descriptor.Name);
var assembly = Assembly.Load("Orchard.Web"); var assembly = _assemblyLoader.Load("Orchard.Web");
return new ExtensionEntry { return new ExtensionEntry {
Descriptor = descriptor, Descriptor = descriptor,

View File

@@ -10,9 +10,11 @@ namespace Orchard.Environment.Extensions.Loaders {
/// Load an extension by looking into specific namespaces of the "Orchard.Core" assembly /// Load an extension by looking into specific namespaces of the "Orchard.Core" assembly
/// </summary> /// </summary>
public class CoreExtensionLoader : ExtensionLoaderBase { public class CoreExtensionLoader : ExtensionLoaderBase {
private readonly IAssemblyLoader _assemblyLoader;
public CoreExtensionLoader(IDependenciesFolder dependenciesFolder) public CoreExtensionLoader(IDependenciesFolder dependenciesFolder, IAssemblyLoader assemblyLoader)
: base(dependenciesFolder) { : base(dependenciesFolder) {
_assemblyLoader = assemblyLoader;
Logger = NullLogger.Instance; Logger = NullLogger.Instance;
} }
@@ -36,7 +38,7 @@ namespace Orchard.Environment.Extensions.Loaders {
protected override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) { protected override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
//Logger.Information("Loading extension \"{0}\"", descriptor.Name); //Logger.Information("Loading extension \"{0}\"", descriptor.Name);
var assembly = Assembly.Load("Orchard.Core"); var assembly = _assemblyLoader.Load("Orchard.Core");
return new ExtensionEntry { return new ExtensionEntry {
Descriptor = descriptor, Descriptor = descriptor,

View File

@@ -15,9 +15,11 @@ namespace Orchard.Environment {
public class DefaultBuildManager : IBuildManager { public class DefaultBuildManager : IBuildManager {
private readonly IVirtualPathProvider _virtualPathProvider; private readonly IVirtualPathProvider _virtualPathProvider;
private readonly IAssemblyLoader _assemblyLoader;
public DefaultBuildManager(IVirtualPathProvider virtualPathProvider) { public DefaultBuildManager(IVirtualPathProvider virtualPathProvider, IAssemblyLoader assemblyLoader) {
_virtualPathProvider = virtualPathProvider; _virtualPathProvider = virtualPathProvider;
_assemblyLoader = assemblyLoader;
} }
public IEnumerable<Assembly> GetReferencedAssemblies() { public IEnumerable<Assembly> GetReferencedAssemblies() {
@@ -33,7 +35,7 @@ namespace Orchard.Environment {
if (!HasReferencedAssembly(name)) if (!HasReferencedAssembly(name))
return null; return null;
return Assembly.Load(name); return _assemblyLoader.Load(name);
} }
@@ -41,19 +43,4 @@ namespace Orchard.Environment {
return BuildManager.GetCompiledAssembly(virtualPath); return BuildManager.GetCompiledAssembly(virtualPath);
} }
} }
public static class BuildManagerExtensions {
public static IEnumerable<string> GetReferencedAssemblyNames(this IBuildManager buildManager) {
return buildManager
.GetReferencedAssemblies()
.Select(a => ExtractAssemblyName(a.FullName));
}
public static string ExtractAssemblyName(string fullName) {
int index = fullName.IndexOf(',');
if (index < 0)
return fullName;
return fullName.Substring(0, index);
}
}
} }

View File

@@ -1,5 +1,6 @@
using System; using System;
using System.Reflection; using System.Reflection;
using Orchard.Environment;
using Orchard.FileSystems.AppData; using Orchard.FileSystems.AppData;
using Orchard.Logging; using Orchard.Logging;
@@ -7,9 +8,11 @@ namespace Orchard.FileSystems.Dependencies {
public class DefaultAssemblyProbingFolder : IAssemblyProbingFolder { public class DefaultAssemblyProbingFolder : IAssemblyProbingFolder {
private const string BasePath = "Dependencies"; private const string BasePath = "Dependencies";
private readonly IAppDataFolder _appDataFolder; private readonly IAppDataFolder _appDataFolder;
private readonly IAssemblyLoader _assemblyLoader;
public DefaultAssemblyProbingFolder(IAppDataFolder appDataFolder) { public DefaultAssemblyProbingFolder(IAppDataFolder appDataFolder, IAssemblyLoader assemblyLoader) {
_appDataFolder = appDataFolder; _appDataFolder = appDataFolder;
_assemblyLoader = assemblyLoader;
Logger = NullLogger.Instance; Logger = NullLogger.Instance;
} }
@@ -39,7 +42,7 @@ namespace Orchard.FileSystems.Dependencies {
if (!_appDataFolder.FileExists(path)) if (!_appDataFolder.FileExists(path))
return null; return null;
return Assembly.Load(moduleName); return _assemblyLoader.Load(moduleName);
} }
public void DeleteAssembly(string moduleName) { public void DeleteAssembly(string moduleName) {

View File

@@ -36,11 +36,13 @@ namespace Orchard.Mvc.ViewEngines.Razor {
foreach (var entry in entries) { foreach (var entry in entries) {
if (entry.directive != null) { if (entry.directive != null) {
if (entry.directive.StartsWith("<%@ Assembly Name=\"")) { if (entry.directive.StartsWith("<%@ Assembly Name=\"")) {
provider.AssemblyBuilder.AddAssemblyReference(Assembly.Load(entry.descriptor.Name)); var assembly = AssemblyLoader.Load(entry.descriptor.Name);
if (assembly != null)
provider.AssemblyBuilder.AddAssemblyReference();
} }
else if (entry.directive.StartsWith("<%@ Assembly Src=\"")) { else if (entry.directive.StartsWith("<%@ Assembly Src=\"")) {
// Returned assembly may be null if the .csproj file doesn't containt any .cs file, for example // Returned assembly may be null if the .csproj file doesn't containt any .cs file, for example
Assembly assembly = BuildManager.GetCompiledAssembly(entry.descriptor.VirtualPath); var assembly = BuildManager.GetCompiledAssembly(entry.descriptor.VirtualPath);
if (assembly != null) if (assembly != null)
provider.AssemblyBuilder.AddAssemblyReference(assembly); provider.AssemblyBuilder.AddAssemblyReference(assembly);
} }
@@ -57,12 +59,14 @@ namespace Orchard.Mvc.ViewEngines.Razor {
set { set {
_hostContainer = value; _hostContainer = value;
BuildManager = _hostContainer.Resolve<IBuildManager>(); BuildManager = _hostContainer.Resolve<IBuildManager>();
AssemblyLoader = _hostContainer.Resolve<IAssemblyLoader>();
DependenciesFolder = _hostContainer.Resolve<IDependenciesFolder>(); DependenciesFolder = _hostContainer.Resolve<IDependenciesFolder>();
Loaders = _hostContainer.Resolve<IEnumerable<IExtensionLoader>>(); Loaders = _hostContainer.Resolve<IEnumerable<IExtensionLoader>>();
} }
} }
public IBuildManager BuildManager { get; set; } public IBuildManager BuildManager { get; set; }
public IAssemblyLoader AssemblyLoader { get; set; }
public IDependenciesFolder DependenciesFolder { get; set; } public IDependenciesFolder DependenciesFolder { get; set; }
public IEnumerable<IExtensionLoader> Loaders { get; set; } public IEnumerable<IExtensionLoader> Loaders { get; set; }