diff --git a/src/Umbraco.Core/CoreBootManager.cs b/src/Umbraco.Core/CoreBootManager.cs index fc783f3a9c..87b2f06a8d 100644 --- a/src/Umbraco.Core/CoreBootManager.cs +++ b/src/Umbraco.Core/CoreBootManager.cs @@ -81,6 +81,9 @@ namespace Umbraco.Core MacroFieldEditorsResolver.Current = new MacroFieldEditorsResolver( PluginManager.Current.ResolveMacroRenderings()); + + PackageActionsResolver.Current = new PackageActionsResolver( + PluginManager.Current.ResolvePackageActions()); } } } diff --git a/src/Umbraco.Core/DataTypesResolver.cs b/src/Umbraco.Core/DataTypesResolver.cs index e69cdab42a..464f296d44 100644 --- a/src/Umbraco.Core/DataTypesResolver.cs +++ b/src/Umbraco.Core/DataTypesResolver.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using Umbraco.Core.Resolving; using umbraco.interfaces; namespace Umbraco.Core diff --git a/src/Umbraco.Core/PluginManager.cs b/src/Umbraco.Core/PluginManager.cs index 830392f326..04a2ce1e74 100644 --- a/src/Umbraco.Core/PluginManager.cs +++ b/src/Umbraco.Core/PluginManager.cs @@ -85,6 +85,15 @@ namespace Umbraco.Core return ResolveTypes(); } + /// + /// Returns all available IPackageAction in application + /// + /// + internal IEnumerable ResolvePackageActions() + { + return ResolveTypes(); + } + /// /// Gets/sets which assemblies to scan when type finding, generally used for unit testing, if not explicitly set /// this will search all assemblies known to have plugins and exclude ones known to not have them. diff --git a/src/Umbraco.Core/CacheRefreshersResolver.cs b/src/Umbraco.Core/Resolving/CacheRefreshersResolver.cs similarity index 88% rename from src/Umbraco.Core/CacheRefreshersResolver.cs rename to src/Umbraco.Core/Resolving/CacheRefreshersResolver.cs index 7083853f59..ba19e1fe35 100644 --- a/src/Umbraco.Core/CacheRefreshersResolver.cs +++ b/src/Umbraco.Core/Resolving/CacheRefreshersResolver.cs @@ -1,10 +1,8 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using umbraco.interfaces; -namespace Umbraco.Core +namespace Umbraco.Core.Resolving { /// /// A resolver to return all ICacheRefresher objects diff --git a/src/Umbraco.Core/LegacyTransientObjectsResolver.cs b/src/Umbraco.Core/Resolving/LegacyTransientObjectsResolver.cs similarity index 95% rename from src/Umbraco.Core/LegacyTransientObjectsResolver.cs rename to src/Umbraco.Core/Resolving/LegacyTransientObjectsResolver.cs index 725be196cd..9344214113 100644 --- a/src/Umbraco.Core/LegacyTransientObjectsResolver.cs +++ b/src/Umbraco.Core/Resolving/LegacyTransientObjectsResolver.cs @@ -2,9 +2,8 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Threading; -using Umbraco.Core.Resolving; -namespace Umbraco.Core +namespace Umbraco.Core.Resolving { /// /// A base resolver used for old legacy factories such as the DataTypeFactory or CacheResolverFactory. diff --git a/src/Umbraco.Core/MacroFieldEditorsResolver.cs b/src/Umbraco.Core/Resolving/MacroFieldEditorsResolver.cs similarity index 94% rename from src/Umbraco.Core/MacroFieldEditorsResolver.cs rename to src/Umbraco.Core/Resolving/MacroFieldEditorsResolver.cs index 8aeaab05f4..fd51e9951d 100644 --- a/src/Umbraco.Core/MacroFieldEditorsResolver.cs +++ b/src/Umbraco.Core/Resolving/MacroFieldEditorsResolver.cs @@ -2,10 +2,9 @@ using System; using System.Collections.Generic; using System.Web.UI; using Umbraco.Core.Macros; -using Umbraco.Core.Resolving; using umbraco.interfaces; -namespace Umbraco.Core +namespace Umbraco.Core.Resolving { /// /// A resolver to return all IMacroGuiRendering objects diff --git a/src/Umbraco.Core/Resolving/PackageActionsResolver.cs b/src/Umbraco.Core/Resolving/PackageActionsResolver.cs new file mode 100644 index 0000000000..eb5561ddd1 --- /dev/null +++ b/src/Umbraco.Core/Resolving/PackageActionsResolver.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using umbraco.interfaces; + +namespace Umbraco.Core.Resolving +{ + /// + /// A resolver to return all IPackageAction objects + /// + internal sealed class PackageActionsResolver : ManyObjectsResolverBase + { + + /// + /// Constructor + /// + /// + internal PackageActionsResolver(IEnumerable packageActions) + : base(packageActions) + { + + } + + /// + /// Gets the implementations. + /// + public IEnumerable PackageActions + { + get + { + return Values; + } + } + + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index aa98676fc2..b3948db2e2 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -51,7 +51,7 @@ - + @@ -66,11 +66,12 @@ - + + - + diff --git a/src/Umbraco.Tests/MacroFieldEditorsResolverTests.cs b/src/Umbraco.Tests/MacroFieldEditorsResolverTests.cs index ebc5c8cb86..33a976dec3 100644 --- a/src/Umbraco.Tests/MacroFieldEditorsResolverTests.cs +++ b/src/Umbraco.Tests/MacroFieldEditorsResolverTests.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Web.UI; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Resolving; using Umbraco.Tests.TestHelpers; using umbraco.editorControls.macrocontainer; using umbraco.interfaces; @@ -28,6 +29,15 @@ namespace Umbraco.Tests MacroFieldEditorsResolver.Current = new MacroFieldEditorsResolver( PluginManager.Current.ResolveMacroRenderings()); + + Resolution.Freeze(); + } + + [TearDown] + public void TearDown() + { + MacroFieldEditorsResolver.Reset(); + Resolution.IsFrozen = false; } [Test] diff --git a/src/Umbraco.Tests/PackageActionFactoryTests.cs b/src/Umbraco.Tests/PackageActionsResolverTests.cs similarity index 76% rename from src/Umbraco.Tests/PackageActionFactoryTests.cs rename to src/Umbraco.Tests/PackageActionsResolverTests.cs index 7df707a44c..aed55c9e03 100644 --- a/src/Umbraco.Tests/PackageActionFactoryTests.cs +++ b/src/Umbraco.Tests/PackageActionsResolverTests.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Xml; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Resolving; using Umbraco.Tests.TestHelpers; using umbraco.cms.businesslogic.packager; using umbraco.interfaces; @@ -10,7 +11,7 @@ using umbraco.interfaces; namespace Umbraco.Tests { [TestFixture] - public class PackageActionFactoryTests + public class PackageActionsResolverTests { [SetUp] public void Initialize() @@ -25,6 +26,18 @@ namespace Umbraco.Tests { this.GetType().Assembly }; + + PackageActionsResolver.Current = new PackageActionsResolver( + PluginManager.Current.ResolvePackageActions()); + + Resolution.Freeze(); + } + + [TearDown] + public void TearDown() + { + PackageActionsResolver.Reset(); + Resolution.IsFrozen = false; } /// @@ -33,7 +46,7 @@ namespace Umbraco.Tests [Test] public void Find_Package_Actions() { - var actions = PackageAction.PackageActions; + var actions = PackageActionsResolver.Current.PackageActions; Assert.AreEqual(2, actions.Count()); } diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index a8a8887518..f86945549e 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -62,7 +62,7 @@ - + diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/cache/dispatcher.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/cache/dispatcher.cs index 646542b4bf..5879869187 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/cache/dispatcher.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/cache/dispatcher.cs @@ -4,6 +4,7 @@ using System.Net; using System.Threading; using System.Xml; using Umbraco.Core; +using Umbraco.Core.Resolving; using umbraco.BusinessLogic; using umbraco.interfaces; using umbraco.IO; diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/cache/factory.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/cache/factory.cs index 1f6e3589b6..6b5448d88c 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/cache/factory.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/cache/factory.cs @@ -3,6 +3,7 @@ using System.Collections.Concurrent; using System.Linq; using System.Web; using Umbraco.Core; +using Umbraco.Core.Resolving; using Umbraco.Web; using umbraco.BusinessLogic.Utils; using umbraco.interfaces; diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/CacheRefresher.asmx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/CacheRefresher.asmx.cs index d2ecd05a33..90f2f56d99 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/CacheRefresher.asmx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/CacheRefresher.asmx.cs @@ -7,6 +7,7 @@ using System.Web; using System.Web.Services; using System.Xml; using Umbraco.Core; +using Umbraco.Core.Resolving; namespace umbraco.presentation.webservices { diff --git a/src/umbraco.cms/PluginManagerExtensions.cs b/src/umbraco.cms/PluginManagerExtensions.cs index 3700cab27f..b0d50a7276 100644 --- a/src/umbraco.cms/PluginManagerExtensions.cs +++ b/src/umbraco.cms/PluginManagerExtensions.cs @@ -55,15 +55,7 @@ namespace umbraco.cms return resolver.ResolveTypes(); } - /// - /// Returns all available IPackageAction in application - /// - /// - /// - internal static IEnumerable ResolvePackageActions(this PluginManager resolver) - { - return resolver.ResolveTypes(); - } + } } \ No newline at end of file diff --git a/src/umbraco.cms/businesslogic/Packager/PackageInstance/PackageActions.cs b/src/umbraco.cms/businesslogic/Packager/PackageInstance/PackageActions.cs index 38e1ea1933..0b71beeccf 100644 --- a/src/umbraco.cms/businesslogic/Packager/PackageInstance/PackageActions.cs +++ b/src/umbraco.cms/businesslogic/Packager/PackageInstance/PackageActions.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Web; using System.Xml; using Umbraco.Core; +using Umbraco.Core.Resolving; using umbraco.BasePages; using umbraco.BusinessLogic.Utils; using umbraco.cms.businesslogic.web; @@ -18,23 +19,7 @@ namespace umbraco.cms.businesslogic.packager /// Package actions are executed on packge install / uninstall. /// public class PackageAction - { - internal static readonly List PackageActions = new List(); - - /// - /// Initializes the class. - /// - static PackageAction() - { - RegisterPackageActions(); - } - - private static void RegisterPackageActions() - { - PackageActions.AddRange( - PluginManager.Current.CreateInstances( - PluginManager.Current.ResolvePackageActions())); - } + { /// /// Runs the package action with the specified action alias. @@ -45,7 +30,7 @@ namespace umbraco.cms.businesslogic.packager public static void RunPackageAction(string packageName, string actionAlias, System.Xml.XmlNode actionXml) { - foreach (IPackageAction ipa in PackageActions) + foreach (var ipa in PackageActionsResolver.Current.PackageActions) { try { @@ -72,7 +57,7 @@ namespace umbraco.cms.businesslogic.packager public static void UndoPackageAction(string packageName, string actionAlias, System.Xml.XmlNode actionXml) { - foreach (IPackageAction ipa in PackageActions) + foreach (IPackageAction ipa in PackageActionsResolver.Current.PackageActions) { try { diff --git a/src/umbraco.cms/businesslogic/macro/MacroEngineFactory.cs b/src/umbraco.cms/businesslogic/macro/MacroEngineFactory.cs index 722ec762c3..714d7d56ff 100644 --- a/src/umbraco.cms/businesslogic/macro/MacroEngineFactory.cs +++ b/src/umbraco.cms/businesslogic/macro/MacroEngineFactory.cs @@ -11,7 +11,9 @@ using umbraco.interfaces; namespace umbraco.cms.businesslogic.macro { - //TODO: This class needs to be changed to use the new MultipleResolverBase + //TODO: This class needs to be changed to use the new MultipleResolverBase, doing this will require migrating and cleaning up + // a bunch of types so I have left it existing here under legacy code for now. The IMacroEngine interface also requires fixing + // considering the new macro types of SurfaceControllers. public class MacroEngineFactory { diff --git a/src/umbraco.cms/businesslogic/media/MediaFactory.cs b/src/umbraco.cms/businesslogic/media/MediaFactory.cs index 985784e757..e4d583e1e8 100644 --- a/src/umbraco.cms/businesslogic/media/MediaFactory.cs +++ b/src/umbraco.cms/businesslogic/media/MediaFactory.cs @@ -9,7 +9,9 @@ using umbraco.BusinessLogic.Utils; namespace umbraco.cms.businesslogic.media { - //TODO: This class needs to inherit from the new MultipleResolverBase class + //TODO: This class needs to be changed to use the new MultipleResolverBase, doing this will require migrating and cleaning up + // a bunch of types so I have left it existing here under legacy code for now. + public class MediaFactory { diff --git a/src/umbraco.editorControls/macrocontainer/MacroEditor.cs b/src/umbraco.editorControls/macrocontainer/MacroEditor.cs index 813d899845..54e709f177 100644 --- a/src/umbraco.editorControls/macrocontainer/MacroEditor.cs +++ b/src/umbraco.editorControls/macrocontainer/MacroEditor.cs @@ -6,6 +6,7 @@ using System.Web.UI.WebControls; using System.Web.UI; using Umbraco.Core; using Umbraco.Core.Macros; +using Umbraco.Core.Resolving; using umbraco.cms.businesslogic.macro; using System.Collections; using umbraco.presentation;