Refactor interaction between Dynamic loader and Dynamic VPP

--HG--
branch : 1.x
This commit is contained in:
Renaud Paquay
2011-05-26 16:40:05 -07:00
parent 6889ba4328
commit 1a30d2492f
2 changed files with 23 additions and 25 deletions

View File

@@ -13,6 +13,8 @@ using Orchard.Utility.Extensions;
namespace Orchard.Environment.Extensions.Loaders {
public class DynamicExtensionLoader : ExtensionLoaderBase {
public static readonly string[] ExtensionsVirtualPathPrefixes = { "~/Modules/", "~/Themes/" };
private readonly IBuildManager _buildManager;
private readonly IVirtualPathProvider _virtualPathProvider;
private readonly IVirtualPathMonitor _virtualPathMonitor;
@@ -21,7 +23,6 @@ namespace Orchard.Environment.Extensions.Loaders {
private readonly IDependenciesFolder _dependenciesFolder;
private readonly IProjectFileParser _projectFileParser;
private readonly ReloadWorkaround _reloadWorkaround = new ReloadWorkaround();
private readonly string[] _modulesPrefixes = { "~/Modules/", "~/Themes/" };
public DynamicExtensionLoader(
IBuildManager buildManager,
@@ -58,14 +59,8 @@ namespace Orchard.Environment.Extensions.Loaders {
return GetDependencies(dependency.VirtualPath);
}
public IEnumerable<string> GetDynamicModuleDependencies(DependencyDescriptor dependency, string virtualPath) {
virtualPath = _virtualPathProvider.ToAppRelative(virtualPath);
if (StringComparer.OrdinalIgnoreCase.Equals(virtualPath, dependency.VirtualPath)) {
return GetDependencies(virtualPath);
}
return Enumerable.Empty<string>();
public IEnumerable<string> GetFileHashDependencies(DependencyDescriptor dependency) {
return GetDependencies(dependency.VirtualPath);
}
public override void Monitor(ExtensionDescriptor descriptor, Action<IVolatileToken> monitor) {
@@ -192,7 +187,7 @@ namespace Orchard.Environment.Extensions.Loaders {
private void AddDependencies(string projectPath, HashSet<string> currentSet) {
// Skip files from locations other than "~/Modules" and "~/Themes"
if (string.IsNullOrEmpty(PrefixMatch(projectPath, _modulesPrefixes))) {
if (string.IsNullOrEmpty(PrefixMatch(projectPath, ExtensionsVirtualPathPrefixes))) {
return;
}

View File

@@ -16,7 +16,6 @@ namespace Orchard.FileSystems.Dependencies {
public class DynamicModuleVirtualPathProvider : VirtualPathProvider, ICustomVirtualPathProvider {
private readonly IDependenciesFolder _dependenciesFolder;
private readonly IEnumerable<IExtensionLoader> _loaders;
private readonly string[] _modulesPrefixes = { "~/Modules/", "~/Themes/" };
public DynamicModuleVirtualPathProvider(IDependenciesFolder dependenciesFolder, IEnumerable<IExtensionLoader> loaders) {
_dependenciesFolder = dependenciesFolder;
@@ -41,25 +40,30 @@ namespace Orchard.FileSystems.Dependencies {
}
private string GetFileHashWorker(string virtualPath, IEnumerable virtualPathDependencies) {
virtualPath = VirtualPathUtility.ToAppRelative(virtualPath);
var desc = GetDependencyDescriptor(virtualPath);
if (desc != null) {
// We are only interested in ".csproj" files loaded from "DynamicExtensionLoader"
var dynamicExtensionLoader = _loaders.Where(l => l.Name == desc.LoaderName).FirstOrDefault() as DynamicExtensionLoader;
if (dynamicExtensionLoader != null) {
var loader = _loaders.Where(l => l.Name == desc.LoaderName).FirstOrDefault() as DynamicExtensionLoader;
if (loader != null) {
if (virtualPath.Equals(desc.VirtualPath, StringComparison.OrdinalIgnoreCase)) {
var otherDependencies = loader.GetDynamicModuleDependencies(desc, virtualPath);
if (otherDependencies.Any()) {
var otherDependencies = dynamicExtensionLoader.GetFileHashDependencies(desc);
if (otherDependencies.Any()) {
var allDependencies = virtualPathDependencies.OfType<string>().Concat(otherDependencies);
var allDependencies = virtualPathDependencies.OfType<string>().Concat(otherDependencies).ToList();
if (Logger.IsEnabled(LogLevel.Debug)) {
Logger.Debug("GetFileHash(\"{0}\") - virtual path dependencies:", virtualPath);
foreach (var dependency in allDependencies) {
Logger.Debug(" Dependency: \"{0}\"", dependency);
if (Logger.IsEnabled(LogLevel.Debug)) {
Logger.Debug("GetFileHash(\"{0}\") - virtual path dependencies:", virtualPath);
foreach (var dependency in allDependencies) {
Logger.Debug(" Dependency: \"{0}\"", dependency);
}
}
}
return base.GetFileHash(virtualPath, allDependencies);
return base.GetFileHash(virtualPath, allDependencies);
}
}
}
}
@@ -71,12 +75,11 @@ namespace Orchard.FileSystems.Dependencies {
}
private DependencyDescriptor GetDependencyDescriptor(string virtualPath) {
var appRelativePath = VirtualPathUtility.ToAppRelative(virtualPath);
var prefix = PrefixMatch(appRelativePath, _modulesPrefixes);
var prefix = PrefixMatch(virtualPath, DynamicExtensionLoader.ExtensionsVirtualPathPrefixes);
if (prefix == null)
return null;
var moduleName = ModuleMatch(appRelativePath, prefix);
var moduleName = ModuleMatch(virtualPath, prefix);
if (moduleName == null)
return null;