From 2115146fdb6428d35f07a50fcb6d4b269f4563d5 Mon Sep 17 00:00:00 2001 From: "shannon@ShandemVaio" Date: Wed, 1 Aug 2012 22:46:13 +0600 Subject: [PATCH] Removed old MacroControlFactory - marked as internal FTW ! moved it to new MacroFieldEditorsResolver using the new framework. Also moved PersistableMacroProperty to new assembly (it was also marked as internal). Updated unit tests to work with Resolution and resetting resolvers. --- src/Umbraco.Core/CacheRefreshersResolver.cs | 48 ---- src/Umbraco.Core/CoreBootManager.cs | 14 +- src/Umbraco.Core/MacroFieldEditorsResolver.cs | 91 ++++++ .../Macros}/PersistableMacroProperty.cs | 9 +- src/Umbraco.Core/PluginManager.cs | 9 + src/Umbraco.Core/PluginTypeResolver.cs | 268 ------------------ src/Umbraco.Core/Resolving/Resolution.cs | 8 +- src/Umbraco.Core/Resolving/ResolverBase.cs | 19 +- src/Umbraco.Core/Umbraco.Core.csproj | 2 + .../CacheRefresherFactoryTests.cs | 13 + src/Umbraco.Tests/ContentStoreTests.cs | 15 +- src/Umbraco.Tests/DataTypeFactoryTests.cs | 13 + ...s.cs => MacroFieldEditorsResolverTests.cs} | 7 +- src/Umbraco.Tests/Umbraco.Tests.csproj | 2 +- .../PluginManagerExtensions.cs | 29 -- .../macrocontainer/MacroControlFactory.cs | 90 ------ .../macrocontainer/MacroEditor.cs | 6 +- .../umbraco.editorControls.csproj | 3 - 18 files changed, 192 insertions(+), 454 deletions(-) create mode 100644 src/Umbraco.Core/MacroFieldEditorsResolver.cs rename src/{umbraco.editorControls/macrocontainer => Umbraco.Core/Macros}/PersistableMacroProperty.cs (88%) delete mode 100644 src/Umbraco.Core/PluginTypeResolver.cs rename src/Umbraco.Tests/{MacroControlFactoryTests.cs => MacroFieldEditorsResolverTests.cs} (80%) delete mode 100644 src/umbraco.editorControls/PluginManagerExtensions.cs delete mode 100644 src/umbraco.editorControls/macrocontainer/MacroControlFactory.cs diff --git a/src/Umbraco.Core/CacheRefreshersResolver.cs b/src/Umbraco.Core/CacheRefreshersResolver.cs index a4dd818144..7083853f59 100644 --- a/src/Umbraco.Core/CacheRefreshersResolver.cs +++ b/src/Umbraco.Core/CacheRefreshersResolver.cs @@ -6,54 +6,6 @@ using umbraco.interfaces; namespace Umbraco.Core { - ///// - ///// A resolver to return all ICacheRefresher objects - ///// - //internal sealed class CacheRefreshersResolver : LegacyTransientObjectsResolver - //{ - - // #region Singleton - - // private static readonly CacheRefreshersResolver Instance = new CacheRefreshersResolver(PluginTypeResolver.Current.ResolveCacheRefreshers()); - - // public static CacheRefreshersResolver Current - // { - // get { return Instance; } - // } - // #endregion - - // #region Constructors - // static CacheRefreshersResolver() { } - - // /// - // /// Constructor - // /// - // /// - // internal CacheRefreshersResolver(IEnumerable refreshers) - // : base(refreshers) - // { - - // } - // #endregion - - // /// - // /// Gets the implementations. - // /// - // public IEnumerable CacheResolvers - // { - // get - // { - // EnsureRefreshersList(); - // return Values; - // } - // } - - // protected override Guid GetUniqueIdentifier(ICacheRefresher obj) - // { - // return obj.UniqueIdentifier; - // } - //} - /// /// A resolver to return all ICacheRefresher objects /// diff --git a/src/Umbraco.Core/CoreBootManager.cs b/src/Umbraco.Core/CoreBootManager.cs index 5dcd90570f..fc783f3a9c 100644 --- a/src/Umbraco.Core/CoreBootManager.cs +++ b/src/Umbraco.Core/CoreBootManager.cs @@ -40,7 +40,10 @@ namespace Umbraco.Core /// public virtual IBootManager Startup(Action afterStartup) { - afterStartup(ApplicationContext.Current); + if (afterStartup != null) + { + afterStartup(ApplicationContext.Current); + } return this; } @@ -57,7 +60,11 @@ namespace Umbraco.Core //stop the timer and log the output _timer.Dispose(); - afterComplete(ApplicationContext.Current); + if (afterComplete != null) + { + afterComplete(ApplicationContext.Current); + } + return this; } @@ -71,6 +78,9 @@ namespace Umbraco.Core DataTypesResolver.Current = new DataTypesResolver( PluginManager.Current.ResolveDataTypes()); + + MacroFieldEditorsResolver.Current = new MacroFieldEditorsResolver( + PluginManager.Current.ResolveMacroRenderings()); } } } diff --git a/src/Umbraco.Core/MacroFieldEditorsResolver.cs b/src/Umbraco.Core/MacroFieldEditorsResolver.cs new file mode 100644 index 0000000000..8aeaab05f4 --- /dev/null +++ b/src/Umbraco.Core/MacroFieldEditorsResolver.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Web.UI; +using Umbraco.Core.Macros; +using Umbraco.Core.Resolving; +using umbraco.interfaces; + +namespace Umbraco.Core +{ + /// + /// A resolver to return all IMacroGuiRendering objects + /// + /// + /// Much of this classes methods are based on legacy code from umbraco.editorControls.macrocontainer.MacroControlFactory + /// this code should probably be reviewed and cleaned up if necessary. + /// + internal sealed class MacroFieldEditorsResolver : ManyObjectsResolverBase + { + + /// + /// Constructor + /// + /// + internal MacroFieldEditorsResolver(IEnumerable macroEditors) + : base(macroEditors, ObjectLifetimeScope.Transient) + { + + } + + /// + /// Gets the implementations. + /// + public IEnumerable MacroFieldEditors + { + get + { + return Values; + } + } + + /// + /// Gets the value based on the type of control + /// + /// + /// + /// + /// This is legacy code migrated from umbraco.editorControls.macrocontainer.MacroControlFactory + /// + internal string GetValueFromMacroControl(Control macroControl) + { + return ((IMacroGuiRendering)macroControl).Value; + } + + /// + /// This is legacy code migrated from umbraco.editorControls.macrocontainer.MacroControlFactory + /// + internal List MacroControlTypes + { + get { return InstanceTypes; } + } + + /// + /// Create an instance of a Macro control and return it. + /// Because the macro control uses inline client script whichs is not generated after postback + /// That's why we use the Page Picker instead of the content picker of the macro. + /// + /// + /// This is legacy code migrated from umbraco.editorControls.macrocontainer.MacroControlFactory + /// + internal Control GetMacroRenderControlByType(PersistableMacroProperty prop, string uniqueId) + { + var m = MacroControlTypes.FindLast(macroGuiCcontrol => macroGuiCcontrol.ToString() == string.Format("{0}.{1}", prop.AssemblyName, prop.TypeName)); + var instance = PluginManager.Current.CreateInstance(m); + if (instance != null) + { + if (!string.IsNullOrEmpty(prop.Value)) + { + instance.Value = prop.Value; + } + var macroControl = instance as Control; + if (macroControl != null) + { + macroControl.ID = uniqueId; + return macroControl; + } + } + return null; + } + + } +} \ No newline at end of file diff --git a/src/umbraco.editorControls/macrocontainer/PersistableMacroProperty.cs b/src/Umbraco.Core/Macros/PersistableMacroProperty.cs similarity index 88% rename from src/umbraco.editorControls/macrocontainer/PersistableMacroProperty.cs rename to src/Umbraco.Core/Macros/PersistableMacroProperty.cs index cad09362f2..d8b4471ca2 100644 --- a/src/umbraco.editorControls/macrocontainer/PersistableMacroProperty.cs +++ b/src/Umbraco.Core/Macros/PersistableMacroProperty.cs @@ -1,10 +1,11 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -namespace umbraco.editorControls.macrocontainer +namespace Umbraco.Core.Macros { + + /// + /// NOTE: This is legacy code, might require a cleanup + /// [Serializable] internal class PersistableMacroProperty { diff --git a/src/Umbraco.Core/PluginManager.cs b/src/Umbraco.Core/PluginManager.cs index 2ce7a9691a..830392f326 100644 --- a/src/Umbraco.Core/PluginManager.cs +++ b/src/Umbraco.Core/PluginManager.cs @@ -76,6 +76,15 @@ namespace Umbraco.Core return ResolveTypes(); } + /// + /// Returns all available IMacroGuiRendering in application + /// + /// + internal IEnumerable ResolveMacroRenderings() + { + 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/PluginTypeResolver.cs b/src/Umbraco.Core/PluginTypeResolver.cs deleted file mode 100644 index 8740e4adf6..0000000000 --- a/src/Umbraco.Core/PluginTypeResolver.cs +++ /dev/null @@ -1,268 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading; -using Umbraco.Core.Logging; -using umbraco.interfaces; - -namespace Umbraco.Core -{ - - /// - /// Used to resolve all plugin types and cache them - /// - /// - /// - /// This class should be used to resolve all plugin types, the TypeFinder should not be used directly! - /// - /// This class can expose extension methods to resolve custom plugins - /// - /// - internal class PluginTypeResolver - { - - internal PluginTypeResolver() - { - } - - static PluginTypeResolver _resolver; - static readonly ReaderWriterLockSlim Lock = new ReaderWriterLockSlim(); - - /// - /// We will ensure that no matter what, only one of these is created, this is to ensure that caching always takes place - /// - /// - /// The setter is generally only used for unit tests - /// - internal static PluginTypeResolver Current - { - get - { - using (var l = new UpgradeableReadLock(Lock)) - { - if (_resolver == null) - { - l.UpgradeToWriteLock(); - _resolver = new PluginTypeResolver(); - } - return _resolver; - } - } - set { _resolver = value; } - } - - private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim(); - private readonly HashSet _types = new HashSet(); - private IEnumerable _assemblies; - - /// - /// Returns all classes attributed with XsltExtensionAttribute attribute - /// - /// - internal IEnumerable ResolveCacheRefreshers() - { - return ResolveTypes(); - } - - /// - /// Returns all available IDataType in application - /// - /// - internal IEnumerable ResolveDataTypes() - { - 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. - /// - internal IEnumerable AssembliesToScan - { - get { return _assemblies ?? (_assemblies = TypeFinder2.GetAssembliesWithKnownExclusions()); } - set { _assemblies = value; } - } - - /// - /// Used to resolve and create instances of the specified type based on the resolved/cached plugin types - /// - /// - /// set to true if an exception is to be thrown if there is an error during instantiation - /// - internal IEnumerable FindAndCreateInstances(bool throwException = false) - { - var types = ResolveTypes(); - return CreateInstances(types, throwException); - } - - /// - /// Used to create instances of the specified type based on the resolved/cached plugin types - /// - /// - /// - /// set to true if an exception is to be thrown if there is an error during instantiation - /// - internal IEnumerable CreateInstances(IEnumerable types, bool throwException = false) - { - var typesAsArray = types.ToArray(); - using (DisposableTimer.DebugDuration( - String.Format("Starting instantiation of {0} objects of type {1}", typesAsArray.Length, typeof(T).FullName), - String.Format("Completed instantiation of {0} objects of type {1}", typesAsArray.Length, typeof(T).FullName))) - { - var instances = new List(); - foreach (var t in typesAsArray) - { - try - { - var typeInstance = (T)Activator.CreateInstance(t); - instances.Add(typeInstance); - } - catch (Exception ex) - { - - LogHelper.Error(String.Format("Error creating type {0}", t.FullName), ex); - - if (throwException) - { - throw ex; - } - } - } - return instances; - } - } - - /// - /// Used to create an instance of the specified type based on the resolved/cached plugin types - /// - /// - /// - /// - /// - internal T CreateInstance(Type type, bool throwException = false) - { - var instances = CreateInstances(new[] { type }, throwException); - return instances.FirstOrDefault(); - } - - private IEnumerable ResolveTypes(Func> finder, bool typeIsAttribute = false) - { - using (var readLock = new UpgradeableReadLock(_lock)) - { - using (DisposableTimer.TraceDuration( - String.Format("Starting resolution types of {0}", typeof(T).FullName), - String.Format("Completed resolution of types of {0}", typeof(T).FullName))) - { - //check if the TypeList already exists, if so return it, if not we'll create it - var typeList = _types.SingleOrDefault(x => x.GetListType().IsType()); - if (typeList == null) - { - //upgrade to a write lock since we're adding to the collection - readLock.UpgradeToWriteLock(); - - typeList = new TypeList(typeIsAttribute); - - foreach (var t in finder()) - { - typeList.AddType(t); - } - - //add the type list to the collection - _types.Add(typeList); - } - return typeList.GetTypes(); - } - } - } - - /// - /// Generic method to find the specified type and cache the result - /// - /// - /// - internal IEnumerable ResolveTypes() - { - return ResolveTypes(() => TypeFinder2.FindClassesOfType(AssembliesToScan)); - } - - /// - /// Generic method to find the specified type that has an attribute and cache the result - /// - /// - /// - /// - internal IEnumerable ResolveTypesWithAttribute() - where TAttribute : Attribute - { - return ResolveTypes(() => TypeFinder2.FindClassesOfTypeWithAttribute(AssembliesToScan)); - } - - /// - /// Generic method to find any type that has the specified attribute - /// - /// - /// - internal IEnumerable ResolveAttributedTypes() - where TAttribute : Attribute - { - return ResolveTypes( - () => TypeFinder2.FindClassesWithAttribute(AssembliesToScan), - true); - } - - /// - /// Used for unit tests - /// - /// - internal HashSet GetTypeLists() - { - return _types; - } - - - - #region Private classes - internal abstract class TypeList - { - public abstract void AddType(Type t); - public abstract Type GetListType(); - public abstract IEnumerable GetTypes(); - } - - internal class TypeList : TypeList - { - private readonly bool _typeIsAttribute; - - public TypeList(bool typeIsAttribute = false) - { - _typeIsAttribute = typeIsAttribute; - } - - private readonly List _types = new List(); - - public override void AddType(Type t) - { - - //if the type is an attribute type we won't do the type check - if (_typeIsAttribute || t.IsType()) - { - _types.Add(t); - } - } - - public override Type GetListType() - { - return typeof(T); - } - - public override IEnumerable GetTypes() - { - return _types; - } - } - #endregion - } -} diff --git a/src/Umbraco.Core/Resolving/Resolution.cs b/src/Umbraco.Core/Resolving/Resolution.cs index 1309e5af83..b63f39d4a9 100644 --- a/src/Umbraco.Core/Resolving/Resolution.cs +++ b/src/Umbraco.Core/Resolving/Resolution.cs @@ -14,7 +14,13 @@ namespace Umbraco.Core.Resolving { public static event EventHandler Frozen; - public static bool IsFrozen { get; private set; } + /// + /// Gets a value indicating that resolution is frozen + /// + /// + /// The internal setter is normally used for unit tests + /// + public static bool IsFrozen { get; internal set; } public static void EnsureNotFrozen() { diff --git a/src/Umbraco.Core/Resolving/ResolverBase.cs b/src/Umbraco.Core/Resolving/ResolverBase.cs index e64e39dac4..4cec7a1ea5 100644 --- a/src/Umbraco.Core/Resolving/ResolverBase.cs +++ b/src/Umbraco.Core/Resolving/ResolverBase.cs @@ -11,9 +11,14 @@ namespace Umbraco.Core.Resolving where TResolver : class { static TResolver _resolver; - - //TODO: This is not correct, this will be the same lock for all ResolverBase classes!! - // this will work i suppose but not really ideal + + /// + /// The lock for the singleton + /// + /// + /// Though resharper says this is in error, it is actually correct. We want a different lock object for each generic type. + /// See this for details: http://confluence.jetbrains.net/display/ReSharper/Static+field+in+generic+type + /// static readonly ReaderWriterLockSlim ResolversLock = new ReaderWriterLockSlim(); public static TResolver Current @@ -40,5 +45,13 @@ namespace Umbraco.Core.Resolving } } } + + /// + /// used in unit tests to reset current to null + /// + internal static void Reset() + { + _resolver = null; + } } } diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index d2e0432f2a..aa98676fc2 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -70,6 +70,8 @@ + + diff --git a/src/Umbraco.Tests/CacheRefresherFactoryTests.cs b/src/Umbraco.Tests/CacheRefresherFactoryTests.cs index 04fdb589eb..b6c1988bd7 100644 --- a/src/Umbraco.Tests/CacheRefresherFactoryTests.cs +++ b/src/Umbraco.Tests/CacheRefresherFactoryTests.cs @@ -2,6 +2,7 @@ using System; using System.Linq; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Resolving; using Umbraco.Tests.TestHelpers; using umbraco.interfaces; @@ -23,6 +24,18 @@ namespace Umbraco.Tests { this.GetType().Assembly }; + + CacheRefreshersResolver.Current = new CacheRefreshersResolver( + PluginManager.Current.ResolveCacheRefreshers()); + + Resolution.Freeze(); + } + + [TearDown] + public void TearDown() + { + CacheRefreshersResolver.Reset(); + Resolution.IsFrozen = false; } [Test] diff --git a/src/Umbraco.Tests/ContentStoreTests.cs b/src/Umbraco.Tests/ContentStoreTests.cs index ff79acf745..d49ac65e2b 100644 --- a/src/Umbraco.Tests/ContentStoreTests.cs +++ b/src/Umbraco.Tests/ContentStoreTests.cs @@ -14,7 +14,14 @@ namespace Umbraco.Tests { [TestFixture] public class ManyObjectResolverTests - { + { + + [SetUp] + public void Initialize() + { + //reset each test + Resolution.IsFrozen = false; + } [Test] public void Ensure_Transient_Object_Creation() @@ -22,6 +29,8 @@ namespace Umbraco.Tests var resolver = new TransientObjectsResolver(); resolver.AddType(); + Resolution.Freeze(); + var instances1 = resolver.Objects; var instances2 = resolver.Objects; @@ -34,6 +43,8 @@ namespace Umbraco.Tests var resolver = new ApplicationObjectsResolver(); resolver.AddType(); + Resolution.Freeze(); + var instances1 = resolver.Objects; var instances2 = resolver.Objects; @@ -48,6 +59,8 @@ namespace Umbraco.Tests var resolver = new HttpRequestObjectsResolver(httpContextFactory.HttpContext); resolver.AddType(); + Resolution.Freeze(); + var instances1 = resolver.Objects; var instances2 = resolver.Objects; diff --git a/src/Umbraco.Tests/DataTypeFactoryTests.cs b/src/Umbraco.Tests/DataTypeFactoryTests.cs index b3b48f5b01..58c5785648 100644 --- a/src/Umbraco.Tests/DataTypeFactoryTests.cs +++ b/src/Umbraco.Tests/DataTypeFactoryTests.cs @@ -1,6 +1,7 @@ using System; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Resolving; using Umbraco.Tests.TestHelpers; using umbraco.cms.businesslogic.datatype; using umbraco.interfaces; @@ -24,6 +25,18 @@ namespace Umbraco.Tests { this.GetType().Assembly }; + + DataTypesResolver.Current = new DataTypesResolver( + PluginManager.Current.ResolveDataTypes()); + + Resolution.Freeze(); + } + + [TearDown] + public void TearDown() + { + DataTypesResolver.Reset(); + Resolution.IsFrozen = false; } [Test] diff --git a/src/Umbraco.Tests/MacroControlFactoryTests.cs b/src/Umbraco.Tests/MacroFieldEditorsResolverTests.cs similarity index 80% rename from src/Umbraco.Tests/MacroControlFactoryTests.cs rename to src/Umbraco.Tests/MacroFieldEditorsResolverTests.cs index 1d7b5fa762..ebc5c8cb86 100644 --- a/src/Umbraco.Tests/MacroControlFactoryTests.cs +++ b/src/Umbraco.Tests/MacroFieldEditorsResolverTests.cs @@ -10,7 +10,7 @@ using umbraco.interfaces; namespace Umbraco.Tests { [TestFixture] - public class MacroControlFactoryTests + public class MacroFieldEditorsResolverTests { [SetUp] public void Initialize() @@ -25,12 +25,15 @@ namespace Umbraco.Tests { this.GetType().Assembly }; + + MacroFieldEditorsResolver.Current = new MacroFieldEditorsResolver( + PluginManager.Current.ResolveMacroRenderings()); } [Test] public void Find_Types() { - var found = MacroControlFactory.MacroControlTypes; + var found = MacroFieldEditorsResolver.Current.MacroControlTypes; Assert.AreEqual(2, found.Count()); } diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index a1ab039a98..a8a8887518 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -59,7 +59,7 @@ - + diff --git a/src/umbraco.editorControls/PluginManagerExtensions.cs b/src/umbraco.editorControls/PluginManagerExtensions.cs deleted file mode 100644 index 813cac2655..0000000000 --- a/src/umbraco.editorControls/PluginManagerExtensions.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using Umbraco.Core; -using umbraco.BusinessLogic.Actions; -using umbraco.cms.businesslogic.macro; -using umbraco.cms.businesslogic.media; -using umbraco.interfaces; - -namespace umbraco.editorControls -{ - /// - /// Extension methods for the PluginTypeResolver - /// - public static class PluginManagerExtensions - { - - /// - /// Returns all available IMacroGuiRendering in application - /// - /// - /// - internal static IEnumerable ResolveMacroRenderings(this PluginManager resolver) - { - return resolver.ResolveTypes(); - } - - - } -} \ No newline at end of file diff --git a/src/umbraco.editorControls/macrocontainer/MacroControlFactory.cs b/src/umbraco.editorControls/macrocontainer/MacroControlFactory.cs deleted file mode 100644 index ec05126721..0000000000 --- a/src/umbraco.editorControls/macrocontainer/MacroControlFactory.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Web.UI; -using Umbraco.Core; -using umbraco.BusinessLogic.Utils; -using umbraco.interfaces; -using umbraco.editorControls; - - - -namespace umbraco.editorControls.macrocontainer -{ - internal class MacroControlFactory - { - - /// - /// All Possible Macro types - /// - private static List _macroControlTypes = null; - - private static readonly ReaderWriterLockSlim Lock = new ReaderWriterLockSlim(); - - - #region Methods - - /// - /// Create an instance of a Macro control and return it. - /// Because the macro control uses inline client script whichs is not generated after postback - /// That's why we use the Page Picker instead of the content picker of the macro. - /// - internal static Control GetMacroRenderControlByType(PersistableMacroProperty prop, string uniqueID) - { - var m = MacroControlTypes.FindLast(macroGuiCcontrol => macroGuiCcontrol.ToString() == string.Format("{0}.{1}", prop.AssemblyName, prop.TypeName)); - var instance = PluginManager.Current.CreateInstance(m); - if (instance != null) - { - if (!string.IsNullOrEmpty(prop.Value)) - { - instance.Value = prop.Value; - } - var macroControl = instance as Control; - if (macroControl != null) - { - macroControl.ID = uniqueID; - return macroControl; - } - } - return null; - } - - /// - /// Gets the value based on the type of control - /// - /// - /// - internal static string GetValueFromMacroControl(Control macroControl) - { - return ((IMacroGuiRendering)macroControl).Value; - } - - #endregion - - #region Properties - /// - /// All Possible Macro types - /// - internal static List MacroControlTypes - { - get - { - using (var readLock = new UpgradeableReadLock(Lock)) - { - if (_macroControlTypes == null || !_macroControlTypes.Any()) - { - - readLock.UpgradeToWriteLock(); - - _macroControlTypes = new List(PluginManager.Current.ResolveMacroRenderings()); - } - - return _macroControlTypes; - } - } - } - #endregion - - } -} diff --git a/src/umbraco.editorControls/macrocontainer/MacroEditor.cs b/src/umbraco.editorControls/macrocontainer/MacroEditor.cs index 41aaabb0be..813d899845 100644 --- a/src/umbraco.editorControls/macrocontainer/MacroEditor.cs +++ b/src/umbraco.editorControls/macrocontainer/MacroEditor.cs @@ -4,6 +4,8 @@ using System.Linq; using System.Text; using System.Web.UI.WebControls; using System.Web.UI; +using Umbraco.Core; +using Umbraco.Core.Macros; using umbraco.cms.businesslogic.macro; using System.Collections; using umbraco.presentation; @@ -236,7 +238,7 @@ namespace umbraco.editorControls.macrocontainer caption.Text = prop.Name; //Get the MacroControl - Control macroControl = MacroControlFactory.GetMacroRenderControlByType(prop, ID + "_" + prop.Alias); + Control macroControl = MacroFieldEditorsResolver.Current.GetMacroRenderControlByType(prop, ID + "_" + prop.Alias); AddFormRow(caption, macroControl); @@ -295,7 +297,7 @@ namespace umbraco.editorControls.macrocontainer { //Make sure we find the correct Unique ID string ControlIdToFind = ID + "_" + prop.Alias; - string value = MacroControlFactory.GetValueFromMacroControl(_formTable.FindControl(ControlIdToFind)); + string value = MacroFieldEditorsResolver.Current.GetValueFromMacroControl(_formTable.FindControl(ControlIdToFind)); sb.AppendFormat(" {0}=\"{1}\" ", prop.Alias, value); } sb.Append(" />"); diff --git a/src/umbraco.editorControls/umbraco.editorControls.csproj b/src/umbraco.editorControls/umbraco.editorControls.csproj index c8899da840..3d3a8faace 100644 --- a/src/umbraco.editorControls/umbraco.editorControls.csproj +++ b/src/umbraco.editorControls/umbraco.editorControls.csproj @@ -176,7 +176,6 @@ - Code @@ -267,9 +266,7 @@ - - Code