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 {
public class AreaExtensionLoader : ExtensionLoaderBase {
private readonly IAssemblyLoader _assemblyLoader;
public AreaExtensionLoader(IDependenciesFolder dependenciesFolder)
public AreaExtensionLoader(IDependenciesFolder dependenciesFolder, IAssemblyLoader assemblyLoader)
: base(dependenciesFolder) {
_assemblyLoader = assemblyLoader;
Logger = NullLogger.Instance;
}
@@ -33,7 +35,7 @@ namespace Orchard.Environment.Extensions.Loaders {
protected override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
//Logger.Information("Loading extension \"{0}\"", descriptor.Name);
var assembly = Assembly.Load("Orchard.Web");
var assembly = _assemblyLoader.Load("Orchard.Web");
return new ExtensionEntry {
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
/// </summary>
public class CoreExtensionLoader : ExtensionLoaderBase {
private readonly IAssemblyLoader _assemblyLoader;
public CoreExtensionLoader(IDependenciesFolder dependenciesFolder)
public CoreExtensionLoader(IDependenciesFolder dependenciesFolder, IAssemblyLoader assemblyLoader)
: base(dependenciesFolder) {
_assemblyLoader = assemblyLoader;
Logger = NullLogger.Instance;
}
@@ -36,7 +38,7 @@ namespace Orchard.Environment.Extensions.Loaders {
protected override ExtensionEntry LoadWorker(ExtensionDescriptor descriptor) {
//Logger.Information("Loading extension \"{0}\"", descriptor.Name);
var assembly = Assembly.Load("Orchard.Core");
var assembly = _assemblyLoader.Load("Orchard.Core");
return new ExtensionEntry {
Descriptor = descriptor,

View File

@@ -15,9 +15,11 @@ namespace Orchard.Environment {
public class DefaultBuildManager : IBuildManager {
private readonly IVirtualPathProvider _virtualPathProvider;
private readonly IAssemblyLoader _assemblyLoader;
public DefaultBuildManager(IVirtualPathProvider virtualPathProvider) {
public DefaultBuildManager(IVirtualPathProvider virtualPathProvider, IAssemblyLoader assemblyLoader) {
_virtualPathProvider = virtualPathProvider;
_assemblyLoader = assemblyLoader;
}
public IEnumerable<Assembly> GetReferencedAssemblies() {
@@ -33,7 +35,7 @@ namespace Orchard.Environment {
if (!HasReferencedAssembly(name))
return null;
return Assembly.Load(name);
return _assemblyLoader.Load(name);
}
@@ -41,19 +43,4 @@ namespace Orchard.Environment {
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.Reflection;
using Orchard.Environment;
using Orchard.FileSystems.AppData;
using Orchard.Logging;
@@ -7,9 +8,11 @@ namespace Orchard.FileSystems.Dependencies {
public class DefaultAssemblyProbingFolder : IAssemblyProbingFolder {
private const string BasePath = "Dependencies";
private readonly IAppDataFolder _appDataFolder;
private readonly IAssemblyLoader _assemblyLoader;
public DefaultAssemblyProbingFolder(IAppDataFolder appDataFolder) {
public DefaultAssemblyProbingFolder(IAppDataFolder appDataFolder, IAssemblyLoader assemblyLoader) {
_appDataFolder = appDataFolder;
_assemblyLoader = assemblyLoader;
Logger = NullLogger.Instance;
}
@@ -39,7 +42,7 @@ namespace Orchard.FileSystems.Dependencies {
if (!_appDataFolder.FileExists(path))
return null;
return Assembly.Load(moduleName);
return _assemblyLoader.Load(moduleName);
}
public void DeleteAssembly(string moduleName) {

View File

@@ -36,11 +36,13 @@ namespace Orchard.Mvc.ViewEngines.Razor {
foreach (var entry in entries) {
if (entry.directive != null) {
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=\"")) {
// 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)
provider.AssemblyBuilder.AddAssemblyReference(assembly);
}
@@ -57,12 +59,14 @@ namespace Orchard.Mvc.ViewEngines.Razor {
set {
_hostContainer = value;
BuildManager = _hostContainer.Resolve<IBuildManager>();
AssemblyLoader = _hostContainer.Resolve<IAssemblyLoader>();
DependenciesFolder = _hostContainer.Resolve<IDependenciesFolder>();
Loaders = _hostContainer.Resolve<IEnumerable<IExtensionLoader>>();
}
}
public IBuildManager BuildManager { get; set; }
public IAssemblyLoader AssemblyLoader { get; set; }
public IDependenciesFolder DependenciesFolder { get; set; }
public IEnumerable<IExtensionLoader> Loaders { get; set; }