From 81b93a6699416ae00be874ba941ff962d5d9f119 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Tue, 6 Jul 2010 11:25:39 -0700 Subject: [PATCH] Small refactorings --HG-- branch : dev --- .../ExtensionLoaderCoordinatorTests.cs | 4 ++-- .../Extensions/ExtensionManagerTests.cs | 4 ++-- .../Commands/CommandHostEnvironment.cs | 5 +++++ .../Extensions/ExtensionLoaderCoordinator.cs | 4 ++-- .../Extensions/Loaders/ExtensionLoaderBase.cs | 6 +----- .../Extensions/Loaders/IExtensionLoader.cs | 4 ++-- .../Loaders/PrecompiledExtensionLoader.cs | 19 +++++++++++-------- .../Loaders/ProbingExtensionLoader.cs | 13 +++++++++---- src/Orchard/Environment/IHostEnvironment.cs | 7 +++++++ 9 files changed, 41 insertions(+), 25 deletions(-) diff --git a/src/Orchard.Tests/Environment/Extensions/ExtensionLoaderCoordinatorTests.cs b/src/Orchard.Tests/Environment/Extensions/ExtensionLoaderCoordinatorTests.cs index 6e3df715a..f6f6271fd 100644 --- a/src/Orchard.Tests/Environment/Extensions/ExtensionLoaderCoordinatorTests.cs +++ b/src/Orchard.Tests/Environment/Extensions/ExtensionLoaderCoordinatorTests.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Reflection; @@ -68,7 +68,7 @@ namespace Orchard.Tests.Environment.Extensions { throw new NotImplementedException(); } - public bool IsCompatibleWithReferences(ExtensionDescriptor extension, IEnumerable references) { + public bool IsCompatibleWithModuleReferences(ExtensionDescriptor extension, IEnumerable references) { throw new NotImplementedException(); } diff --git a/src/Orchard.Tests/Environment/Extensions/ExtensionManagerTests.cs b/src/Orchard.Tests/Environment/Extensions/ExtensionManagerTests.cs index 41ef9dd98..af342a9fb 100644 --- a/src/Orchard.Tests/Environment/Extensions/ExtensionManagerTests.cs +++ b/src/Orchard.Tests/Environment/Extensions/ExtensionManagerTests.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Reflection; @@ -68,7 +68,7 @@ namespace Orchard.Tests.Environment.Extensions { throw new NotImplementedException(); } - public bool IsCompatibleWithReferences(ExtensionDescriptor extension, IEnumerable references) { + public bool IsCompatibleWithModuleReferences(ExtensionDescriptor extension, IEnumerable references) { throw new NotImplementedException(); } diff --git a/src/Orchard/Commands/CommandHostEnvironment.cs b/src/Orchard/Commands/CommandHostEnvironment.cs index a44e69bbc..00a3d6dfd 100644 --- a/src/Orchard/Commands/CommandHostEnvironment.cs +++ b/src/Orchard/Commands/CommandHostEnvironment.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Web.Hosting; using Orchard.Environment; @@ -12,6 +13,10 @@ namespace Orchard.Commands { return HostingEnvironment.MapPath(virtualPath); } + public bool IsAssemblyLoaded(string name) { + return AppDomain.CurrentDomain.GetAssemblies().Any(a => a.GetName().Name == name); + } + public void RestartAppDomain() { //Don't restart AppDomain in command line environment } diff --git a/src/Orchard/Environment/Extensions/ExtensionLoaderCoordinator.cs b/src/Orchard/Environment/Extensions/ExtensionLoaderCoordinator.cs index 6041ca598..15ca04ed6 100644 --- a/src/Orchard/Environment/Extensions/ExtensionLoaderCoordinator.cs +++ b/src/Orchard/Environment/Extensions/ExtensionLoaderCoordinator.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using Orchard.Caching; @@ -112,7 +112,7 @@ namespace Orchard.Environment.Extensions { .Select(e => context.ProcessedExtensions[e.Name]); var activatedExtension = extensionProbes - .Where(e => e.Loader.IsCompatibleWithReferences(extension, processedModuleReferences)) + .Where(e => e.Loader.IsCompatibleWithModuleReferences(extension, processedModuleReferences)) .FirstOrDefault(); var previousDependency = context.PreviousDependencies.Where(d => StringComparer.OrdinalIgnoreCase.Equals(d.Name, extension.Name)).FirstOrDefault(); diff --git a/src/Orchard/Environment/Extensions/Loaders/ExtensionLoaderBase.cs b/src/Orchard/Environment/Extensions/Loaders/ExtensionLoaderBase.cs index d17b6926a..70a5f41e2 100644 --- a/src/Orchard/Environment/Extensions/Loaders/ExtensionLoaderBase.cs +++ b/src/Orchard/Environment/Extensions/Loaders/ExtensionLoaderBase.cs @@ -25,7 +25,7 @@ namespace Orchard.Environment.Extensions.Loaders { return null; } - public virtual bool IsCompatibleWithReferences(ExtensionDescriptor extension, IEnumerable references) { + public virtual bool IsCompatibleWithModuleReferences(ExtensionDescriptor extension, IEnumerable references) { return true; } @@ -57,9 +57,5 @@ namespace Orchard.Environment.Extensions.Loaders { public virtual IEnumerable GetWebFormVirtualDependencies(DependencyDescriptor dependency) { return Enumerable.Empty(); } - - protected static bool IsAssemblyLoaded(string moduleName) { - return AppDomain.CurrentDomain.GetAssemblies().Any(a => a.GetName().Name == moduleName); - } } } \ No newline at end of file diff --git a/src/Orchard/Environment/Extensions/Loaders/IExtensionLoader.cs b/src/Orchard/Environment/Extensions/Loaders/IExtensionLoader.cs index 3fe68678c..2b07e6ff5 100644 --- a/src/Orchard/Environment/Extensions/Loaders/IExtensionLoader.cs +++ b/src/Orchard/Environment/Extensions/Loaders/IExtensionLoader.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Reflection; using Orchard.Caching; @@ -29,7 +29,7 @@ namespace Orchard.Environment.Extensions.Loaders { Assembly LoadReference(DependencyReferenceDescriptor reference); void ReferenceActivated(ExtensionLoadingContext context, ExtensionReferenceProbeEntry referenceEntry); void ReferenceDeactivated(ExtensionLoadingContext context, ExtensionReferenceProbeEntry referenceEntry); - bool IsCompatibleWithReferences(ExtensionDescriptor extension, IEnumerable references); + bool IsCompatibleWithModuleReferences(ExtensionDescriptor extension, IEnumerable references); ExtensionProbeEntry Probe(ExtensionDescriptor descriptor); ExtensionEntry Load(ExtensionDescriptor descriptor); diff --git a/src/Orchard/Environment/Extensions/Loaders/PrecompiledExtensionLoader.cs b/src/Orchard/Environment/Extensions/Loaders/PrecompiledExtensionLoader.cs index e9d767423..987851936 100644 --- a/src/Orchard/Environment/Extensions/Loaders/PrecompiledExtensionLoader.cs +++ b/src/Orchard/Environment/Extensions/Loaders/PrecompiledExtensionLoader.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -15,16 +15,19 @@ namespace Orchard.Environment.Extensions.Loaders { /// extension directory. /// public class PrecompiledExtensionLoader : ExtensionLoaderBase { + private readonly IHostEnvironment _hostEnvironment; private readonly IAssemblyProbingFolder _assemblyProbingFolder; private readonly IVirtualPathProvider _virtualPathProvider; private readonly IVirtualPathMonitor _virtualPathMonitor; - public PrecompiledExtensionLoader(IDependenciesFolder dependenciesFolder, + public PrecompiledExtensionLoader( + IHostEnvironment hostEnvironment, + IDependenciesFolder dependenciesFolder, IAssemblyProbingFolder assemblyProbingFolder, IVirtualPathProvider virtualPathProvider, IVirtualPathMonitor virtualPathMonitor) : base(dependenciesFolder) { - + _hostEnvironment = hostEnvironment; _assemblyProbingFolder = assemblyProbingFolder; _virtualPathProvider = virtualPathProvider; _virtualPathMonitor = virtualPathMonitor; @@ -53,7 +56,7 @@ namespace Orchard.Environment.Extensions.Loaders { }); // We need to restart the appDomain if the assembly is loaded - if (IsAssemblyLoaded(dependency.Name)) { + 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; } @@ -72,7 +75,7 @@ namespace Orchard.Environment.Extensions.Loaders { ctx.CopyActions.Add(() => _assemblyProbingFolder.StoreAssembly(extension.Name, sourceFileName)); // We need to restart the appDomain if the assembly is loaded - if (IsAssemblyLoaded(extension.Name)) { + if (_hostEnvironment.IsAssemblyLoaded(extension.Name)) { Logger.Information("ExtensionRemoved: Module \"{0}\" is activated with newer file and its assembly is loaded, forcing AppDomain restart", extension.Name); ctx.RestartAppDomain = true; } @@ -88,7 +91,7 @@ namespace Orchard.Environment.Extensions.Loaders { }); // We need to restart the appDomain if the assembly is loaded - if (IsAssemblyLoaded(extension.Name)) { + 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; } @@ -110,7 +113,7 @@ namespace Orchard.Environment.Extensions.Loaders { context.CopyActions.Add(() => _assemblyProbingFolder.StoreAssembly(referenceEntry.Name, sourceFileName)); // We need to restart the appDomain if the assembly is loaded - if (IsAssemblyLoaded(referenceEntry.Name)) { + if (_hostEnvironment.IsAssemblyLoaded(referenceEntry.Name)) { Logger.Information("ReferenceActivated: Reference \"{0}\" is activated with newer file and its assembly is loaded, forcing AppDomain restart", referenceEntry.Name); context.RestartAppDomain = true; } @@ -143,7 +146,7 @@ namespace Orchard.Environment.Extensions.Loaders { } ); } - public override bool IsCompatibleWithReferences(ExtensionDescriptor extension, IEnumerable references) { + public override bool IsCompatibleWithModuleReferences(ExtensionDescriptor extension, IEnumerable 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. diff --git a/src/Orchard/Environment/Extensions/Loaders/ProbingExtensionLoader.cs b/src/Orchard/Environment/Extensions/Loaders/ProbingExtensionLoader.cs index 179db141d..95e44dba2 100644 --- a/src/Orchard/Environment/Extensions/Loaders/ProbingExtensionLoader.cs +++ b/src/Orchard/Environment/Extensions/Loaders/ProbingExtensionLoader.cs @@ -10,12 +10,17 @@ namespace Orchard.Environment.Extensions.Loaders { /// file can be found in the "App_Data/Dependencies" folder. /// public class ProbingExtensionLoader : ExtensionLoaderBase { + private readonly IHostEnvironment _hostEnvironment; private readonly IDependenciesFolder _dependenciesFolder; private readonly IAssemblyProbingFolder _assemblyProbingFolder; - public ProbingExtensionLoader(IDependenciesFolder dependenciesFolder, IAssemblyProbingFolder assemblyProbingFolder) + public ProbingExtensionLoader( + IHostEnvironment hostEnvironment, + IDependenciesFolder dependenciesFolder, + IAssemblyProbingFolder assemblyProbingFolder) : base(dependenciesFolder) { + _hostEnvironment = hostEnvironment; _dependenciesFolder = dependenciesFolder; _assemblyProbingFolder = assemblyProbingFolder; Logger = NullLogger.Instance; @@ -42,7 +47,7 @@ namespace Orchard.Environment.Extensions.Loaders { }); // We need to restart the appDomain if the assembly is loaded - if (IsAssemblyLoaded(dependency.Name)) { + 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; } @@ -58,14 +63,14 @@ namespace Orchard.Environment.Extensions.Loaders { }); // We need to restart the appDomain if the assembly is loaded - if (IsAssemblyLoaded(extension.Name)) { + 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 IsCompatibleWithReferences(ExtensionDescriptor extension, IEnumerable references) { + public override bool IsCompatibleWithModuleReferences(ExtensionDescriptor extension, IEnumerable 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. diff --git a/src/Orchard/Environment/IHostEnvironment.cs b/src/Orchard/Environment/IHostEnvironment.cs index 135744917..772ef04fa 100644 --- a/src/Orchard/Environment/IHostEnvironment.cs +++ b/src/Orchard/Environment/IHostEnvironment.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Linq; using System.Web; using System.Web.Hosting; using Orchard.Services; @@ -13,6 +14,8 @@ namespace Orchard.Environment { bool IsFullTrust { get; } string MapPath(string virtualPath); + bool IsAssemblyLoaded(string name); + void RestartAppDomain(); void ResetSiteCompilation(); } @@ -32,6 +35,10 @@ namespace Orchard.Environment { return HostingEnvironment.MapPath(virtualPath); } + public bool IsAssemblyLoaded(string name) { + return AppDomain.CurrentDomain.GetAssemblies().Any(a => a.GetName().Name == name); + } + public void RestartAppDomain() { ResetSiteCompilation(); }