mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Refactor interaction between Dynamic loader and Dynamic VPP
--HG-- branch : 1.x
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
|
||||
|
Reference in New Issue
Block a user