diff --git a/src/Umbraco.Core/CacheRefreshersResolver.cs b/src/Umbraco.Core/CacheRefreshersResolver.cs
index 51c6cfc183..e01dfba01a 100644
--- a/src/Umbraco.Core/CacheRefreshersResolver.cs
+++ b/src/Umbraco.Core/CacheRefreshersResolver.cs
@@ -31,7 +31,7 @@ namespace Umbraco.Core
{
get
{
- EnsureIdsAreTracked();
+ EnsureIsInitialized();
return Values;
}
}
diff --git a/src/Umbraco.Core/CoreBootManager.cs b/src/Umbraco.Core/CoreBootManager.cs
index 9443a8abce..a5e9fa43cb 100644
--- a/src/Umbraco.Core/CoreBootManager.cs
+++ b/src/Umbraco.Core/CoreBootManager.cs
@@ -12,6 +12,7 @@ using Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSix;
using Umbraco.Core.Persistence.UnitOfWork;
using Umbraco.Core.PropertyEditors;
using Umbraco.Core.Publishing;
+using Umbraco.Core.Macros;
using Umbraco.Core.Services;
using MigrationsVersionFourNineZero = Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionFourNineZero;
diff --git a/src/Umbraco.Core/DataTypesResolver.cs b/src/Umbraco.Core/DataTypesResolver.cs
index 65dced66b3..325afe8690 100644
--- a/src/Umbraco.Core/DataTypesResolver.cs
+++ b/src/Umbraco.Core/DataTypesResolver.cs
@@ -27,7 +27,7 @@ namespace Umbraco.Core
{
get
{
- EnsureIdsAreTracked();
+ EnsureIsInitialized();
return Values;
}
}
diff --git a/src/Umbraco.Core/ObjectResolution/MacroFieldEditorsResolver.cs b/src/Umbraco.Core/Macros/MacroFieldEditorsResolver.cs
similarity index 91%
rename from src/Umbraco.Core/ObjectResolution/MacroFieldEditorsResolver.cs
rename to src/Umbraco.Core/Macros/MacroFieldEditorsResolver.cs
index 6015c14d94..df7dc4fbf4 100644
--- a/src/Umbraco.Core/ObjectResolution/MacroFieldEditorsResolver.cs
+++ b/src/Umbraco.Core/Macros/MacroFieldEditorsResolver.cs
@@ -1,15 +1,13 @@
using System;
using System.Collections.Generic;
-using System.Linq;
using System.Web;
using System.Web.UI;
-using Umbraco.Core.Macros;
+using System.Linq;
+using Umbraco.Core.ObjectResolution;
using umbraco.interfaces;
-namespace Umbraco.Core.ObjectResolution
+namespace Umbraco.Core.Macros
{
- // FIXME - specific resolvers should not be in Umbraco.Core.ObjectResolution ??
-
///
/// A resolver to return all IMacroGuiRendering objects
///
diff --git a/src/Umbraco.Core/ObjectResolution/LazyManyObjectsResolverbase.cs b/src/Umbraco.Core/ObjectResolution/LazyManyObjectsResolverbase.cs
index 21374a48f5..7731916a7f 100644
--- a/src/Umbraco.Core/ObjectResolution/LazyManyObjectsResolverbase.cs
+++ b/src/Umbraco.Core/ObjectResolution/LazyManyObjectsResolverbase.cs
@@ -149,9 +149,8 @@ namespace Umbraco.Core.ObjectResolution
{
EnsureAddSupport();
- EnsureResolutionNotFrozen();
-
- using (GetWriteLock())
+ using (Resolution.Configuration)
+ using (GetWriteLock())
{
foreach (var t in types)
{
@@ -168,9 +167,8 @@ namespace Umbraco.Core.ObjectResolution
{
EnsureAddSupport();
- EnsureResolutionNotFrozen();
-
- using (GetWriteLock())
+ using (Resolution.Configuration)
+ using (GetWriteLock())
{
_listOfTypeListDelegates.Add(typeListDelegate);
}
@@ -184,9 +182,8 @@ namespace Umbraco.Core.ObjectResolution
{
EnsureAddSupport();
- EnsureResolutionNotFrozen();
-
- using (GetWriteLock())
+ using (Resolution.Configuration)
+ using (GetWriteLock())
{
_lazyTypeList.Add(value);
}
@@ -208,9 +205,8 @@ namespace Umbraco.Core.ObjectResolution
{
EnsureClearSupport();
- EnsureResolutionNotFrozen();
-
- using (GetWriteLock())
+ using (Resolution.Configuration)
+ using (GetWriteLock())
{
_lazyTypeList.Clear();
}
diff --git a/src/Umbraco.Core/ObjectResolution/LegacyTransientObjectsResolver.cs b/src/Umbraco.Core/ObjectResolution/LegacyTransientObjectsResolver.cs
index 18d67f3b41..23eb1f7565 100644
--- a/src/Umbraco.Core/ObjectResolution/LegacyTransientObjectsResolver.cs
+++ b/src/Umbraco.Core/ObjectResolution/LegacyTransientObjectsResolver.cs
@@ -7,10 +7,10 @@ using System.Threading;
namespace Umbraco.Core.ObjectResolution
{
///
- /// A base resolver used for old legacy factories such as the DataTypeFactory or CacheResolverFactory.
+ /// The base class for old legacy factories such as the DataTypeFactory or CacheResolverFactory.
///
- ///
- ///
+ /// The type of the concrete resolver class.
+ /// The type of the resolved objects.
///
/// This class contains basic functionality to mimic the functionality in these old factories since they all return
/// transient objects (though this should be changed) and the method GetById needs to lookup a type to an ID and since
@@ -21,7 +21,9 @@ namespace Umbraco.Core.ObjectResolution
where TResolved : class
where TResolver : class
{
-
+ private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();
+ private ConcurrentDictionary _id2type;
+
#region Constructors
///
@@ -40,46 +42,45 @@ namespace Umbraco.Core.ObjectResolution
#endregion
///
- /// Maintains a list of Ids and their types when first call to CacheResolvers or GetById occurs, this is used
- /// in order to return a single object by id without instantiating the entire type stack.
+ /// Returns the unique identifier of the type of a specified object.
///
- private ConcurrentDictionary _trackIdToType;
- private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();
+ /// The object.
+ /// The unique identifier of the type of .
+ protected abstract Guid GetUniqueIdentifier(TResolved value);
///
- /// method to return the unique id for type T
+ /// Returns a new instance for the type identified by its unique type identifier.
///
- ///
- ///
- protected abstract Guid GetUniqueIdentifier(TResolved obj);
-
- ///
- /// Returns a new TResolved instance by id
- ///
- ///
- ///
+ /// The type identifier.
+ /// The value of the type uniquely identified by .
public TResolved GetById(Guid id)
{
- EnsureIdsAreTracked();
- return !_trackIdToType.ContainsKey(id)
+ EnsureIsInitialized();
+ return !_id2type.ContainsKey(id)
? null
- : PluginManager.Current.CreateInstance(_trackIdToType[id]);
+ : PluginManager.Current.CreateInstance(_id2type[id]);
}
///
- /// Populates the ids -> Type dictionary to allow us to instantiate a type by Id since these legacy types doesn't contain any metadata
+ /// Populates the identifiers-to-types dictionnary.
///
- protected void EnsureIdsAreTracked()
+ ///
+ /// This allow us to instantiate a type by ID since these legacy types doesn't contain any metadata.
+ /// We instanciate all types once to get their unique identifier, then build the dictionary so that
+ /// when GetById is called, we can instanciate a single object.
+ ///
+ protected void EnsureIsInitialized()
{
using (var l = new UpgradeableReadLock(_lock))
{
- if (_trackIdToType == null)
+ if (_id2type == null)
{
l.UpgradeToWriteLock();
- _trackIdToType = new ConcurrentDictionary();
- foreach (var v in Values)
+
+ _id2type = new ConcurrentDictionary();
+ foreach (var value in Values)
{
- _trackIdToType.TryAdd(GetUniqueIdentifier(v), v.GetType());
+ _id2type.TryAdd(GetUniqueIdentifier(value), value.GetType());
}
}
}
diff --git a/src/Umbraco.Core/ObjectResolution/ManyObjectsResolverBase.cs b/src/Umbraco.Core/ObjectResolution/ManyObjectsResolverBase.cs
index 64d850c66e..93185a32d7 100644
--- a/src/Umbraco.Core/ObjectResolution/ManyObjectsResolverBase.cs
+++ b/src/Umbraco.Core/ObjectResolution/ManyObjectsResolverBase.cs
@@ -17,6 +17,7 @@ namespace Umbraco.Core.ObjectResolution
{
private IEnumerable _applicationInstances = null;
private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();
+ private readonly string _httpContextKey;
private readonly List _instanceTypes = new List();
private int _defaultPluginWeight = 10;
@@ -41,6 +42,8 @@ namespace Umbraco.Core.ObjectResolution
}
LifetimeScope = scope;
+ if (scope == ObjectLifetimeScope.HttpRequest)
+ _httpContextKey = this.GetType().FullName;
_instanceTypes = new List();
}
@@ -56,6 +59,7 @@ namespace Umbraco.Core.ObjectResolution
if (httpContext == null)
throw new ArgumentNullException("httpContext");
LifetimeScope = ObjectLifetimeScope.HttpRequest;
+ _httpContextKey = this.GetType().FullName;
CurrentHttpContext = httpContext;
_instanceTypes = new List();
}
@@ -155,10 +159,10 @@ namespace Umbraco.Core.ObjectResolution
protected IEnumerable Values
{
get
- {
- // cannot return values unless resolution is frozen, or we can
- if (!CanResolveBeforeFrozen && !Resolution.IsFrozen)
- throw new InvalidOperationException("Values cannot be returned until resolution is frozen");
+ {
+ // ensure we can
+ if (!CanResolveBeforeFrozen)
+ Resolution.EnsureIsFrozen();
// note: we apply .ToArray() to the output of CreateInstance() because that is an IEnumerable that
// comes from the PluginManager we want to be _sure_ that it's not a Linq of some sort, but the
@@ -168,16 +172,15 @@ namespace Umbraco.Core.ObjectResolution
{
case ObjectLifetimeScope.HttpRequest:
// create new instances per HttpContext
- var key = this.GetType().FullName; // use full type name as key
using (var l = new UpgradeableReadLock(_lock))
{
// create if not already there
- if (CurrentHttpContext.Items[key] == null)
+ if (CurrentHttpContext.Items[_httpContextKey] == null)
{
l.UpgradeToWriteLock();
- CurrentHttpContext.Items[key] = CreateInstances().ToArray();
+ CurrentHttpContext.Items[_httpContextKey] = CreateInstances().ToArray();
}
- return (List)CurrentHttpContext.Items[key];
+ return (List)CurrentHttpContext.Items[_httpContextKey];
}
case ObjectLifetimeScope.Application:
@@ -210,11 +213,13 @@ namespace Umbraco.Core.ObjectResolution
return PluginManager.Current.CreateInstances(InstanceTypes);
}
+ #region Types collection manipulation
+
///
/// Ensures that a type is a valid type for the resolver.
///
/// The type to test.
- /// the type is not a valid type for the resolver.
+ /// the type is not a valid type for the resolver.
protected void EnsureCorrectType(Type value)
{
if (!TypeHelper.IsTypeAssignableFrom(value))
@@ -222,8 +227,6 @@ namespace Umbraco.Core.ObjectResolution
"Type {0} is not an acceptable type for resolver {1}.", value.FullName, this.GetType().FullName));
}
- #region Types collection manipulation
-
///
/// Removes a type.
///
@@ -233,8 +236,8 @@ namespace Umbraco.Core.ObjectResolution
public virtual void RemoveType(Type value)
{
EnsureRemoveSupport();
- EnsureResolutionNotFrozen();
+ using (Resolution.Configuration)
using (var l = new UpgradeableReadLock(_lock))
{
EnsureCorrectType(value);
@@ -265,8 +268,8 @@ namespace Umbraco.Core.ObjectResolution
protected void AddTypes(IEnumerable types)
{
EnsureAddSupport();
- EnsureResolutionNotFrozen();
+ using (Resolution.Configuration)
using (new WriteLock(_lock))
{
foreach(var t in types)
@@ -292,8 +295,8 @@ namespace Umbraco.Core.ObjectResolution
public virtual void AddType(Type value)
{
EnsureAddSupport();
- EnsureResolutionNotFrozen();
+ using (Resolution.Configuration)
using (var l = new UpgradeableReadLock(_lock))
{
EnsureCorrectType(value);
@@ -327,8 +330,8 @@ namespace Umbraco.Core.ObjectResolution
public virtual void Clear()
{
EnsureClearSupport();
- EnsureResolutionNotFrozen();
+ using (Resolution.Configuration)
using (new WriteLock(_lock))
{
_instanceTypes.Clear();
@@ -346,8 +349,8 @@ namespace Umbraco.Core.ObjectResolution
public virtual void InsertType(int index, Type value)
{
EnsureInsertSupport();
- EnsureResolutionNotFrozen();
+ using (Resolution.Configuration)
using (var l = new UpgradeableReadLock(_lock))
{
EnsureCorrectType(value);
@@ -373,6 +376,7 @@ namespace Umbraco.Core.ObjectResolution
InsertType(index, typeof(T));
}
+ ///
/// Inserts a type before a specified, already existing type.
///
/// The existing type before which to insert.
@@ -383,8 +387,8 @@ namespace Umbraco.Core.ObjectResolution
public virtual void InsertTypeBefore(Type existingType, Type value)
{
EnsureInsertSupport();
- EnsureResolutionNotFrozen();
+ using (Resolution.Configuration)
using (var l = new UpgradeableReadLock(_lock))
{
EnsureCorrectType(existingType);
@@ -452,15 +456,6 @@ namespace Umbraco.Core.ObjectResolution
{
return new WriteLock(_lock);
}
-
- ///
- /// Throws an exception if resolution is frozen
- ///
- protected void EnsureResolutionNotFrozen()
- {
- if (Resolution.IsFrozen)
- throw new InvalidOperationException("The type list cannot be modified after resolution has been frozen");
- }
///
/// Throws an exception if this does not support Remove
diff --git a/src/Umbraco.Core/ObjectResolution/Resolution.cs b/src/Umbraco.Core/ObjectResolution/Resolution.cs
index 8e0670d169..3254da30c5 100644
--- a/src/Umbraco.Core/ObjectResolution/Resolution.cs
+++ b/src/Umbraco.Core/ObjectResolution/Resolution.cs
@@ -1,4 +1,5 @@
using System;
+using System.Threading;
namespace Umbraco.Core.ObjectResolution
{
@@ -6,12 +7,12 @@ namespace Umbraco.Core.ObjectResolution
/// Represents the status of objects resolution.
///
///
- /// Objects resolution can be frozen ie nothing can change anymore.
- /// Nothing in resolution is thread-safe, because everything should take place when the application is starting.
+ /// Before resolution is frozen it is possible to access its configuration, but not to get values.
+ /// Once resolution is frozen, it is not possible to access its configuration anymore, but it is possible to get values.
///
- internal class Resolution
+ internal static class Resolution
{
- // NOTE : must clarify freezing... SingleObjectResolverBase does not honor it...
+ private static readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();
///
/// Occurs when resolution is frozen.
@@ -22,17 +23,30 @@ namespace Umbraco.Core.ObjectResolution
///
/// Gets or sets a value indicating whether resolution of objects is frozen.
///
- /// The internal setter is to be used in unit tests.
- public static bool IsFrozen { get; internal set; }
+ public static bool IsFrozen { get; private set; }
+
+ public static void EnsureIsFrozen()
+ {
+ if (!IsFrozen)
+ throw new Exception("Resolution is not frozen, it is not yet possible to get values from it.");
+ }
///
- /// Ensures that resolution is not frozen, else throws.
+ /// Returns a disposable object that represents safe access to unfrozen resolution configuration.
///
- /// resolution is frozen.
- public static void EnsureNotFrozen()
+ /// Should be used in a using(Resolution.Configuration) { ... } mode.
+ public static IDisposable Configuration
{
- if (Resolution.IsFrozen)
- throw new InvalidOperationException("Resolution is frozen. It is not possible to modify resolvers once resolution is frozen.");
+ get
+ {
+ IDisposable l = new WriteLock(_lock);
+ if (Resolution.IsFrozen)
+ {
+ l.Dispose();
+ throw new InvalidOperationException("Resolution is frozen, it is not possible to configure it anymore.");
+ }
+ return l;
+ }
}
///
@@ -48,5 +62,14 @@ namespace Umbraco.Core.ObjectResolution
if (Frozen != null)
Frozen(null, null);
}
+
+ ///
+ /// Unfreezes resolution.
+ ///
+ /// To be used in unit tests.
+ internal static void Unfreeze()
+ {
+ IsFrozen = false;
+ }
}
}
diff --git a/src/Umbraco.Core/ObjectResolution/ResolverBase.cs b/src/Umbraco.Core/ObjectResolution/ResolverBase.cs
index f212005d36..8c07aa306e 100644
--- a/src/Umbraco.Core/ObjectResolution/ResolverBase.cs
+++ b/src/Umbraco.Core/ObjectResolution/ResolverBase.cs
@@ -63,7 +63,10 @@ namespace Umbraco.Core.ObjectResolution
/// To be used in unit tests.
internal static void Reset()
{
- _resolver = null;
+ using (new WriteLock(ResolversLock))
+ {
+ _resolver = null;
+ }
}
}
}
diff --git a/src/Umbraco.Core/ObjectResolution/SingleObjectResolverBase.cs b/src/Umbraco.Core/ObjectResolution/SingleObjectResolverBase.cs
index 6940f908ee..224467db6f 100644
--- a/src/Umbraco.Core/ObjectResolution/SingleObjectResolverBase.cs
+++ b/src/Umbraco.Core/ObjectResolution/SingleObjectResolverBase.cs
@@ -1,4 +1,5 @@
using System;
+using System.Threading;
namespace Umbraco.Core.ObjectResolution
{
@@ -14,10 +15,9 @@ namespace Umbraco.Core.ObjectResolution
where TResolved : class
where TResolver : class
{
- TResolved _resolved;
- readonly bool _canBeNull;
-
- // NOTE - we're not freezing resolution here so it is potentially possible to change the instance at any time?
+ private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();
+ private readonly bool _canBeNull;
+ private TResolved _value;
#region Constructors
@@ -39,7 +39,7 @@ namespace Umbraco.Core.ObjectResolution
protected SingleObjectResolverBase(TResolved value)
: this(false)
{
- _resolved = value;
+ _value = value;
}
///
@@ -63,7 +63,7 @@ namespace Umbraco.Core.ObjectResolution
/// otherwise an exception will be thrown when reading it.
protected SingleObjectResolverBase(TResolved value, bool canBeNull)
{
- _resolved = value;
+ _value = value;
_canBeNull = canBeNull;
}
@@ -82,7 +82,7 @@ namespace Umbraco.Core.ObjectResolution
///
public bool HasValue
{
- get { return _resolved != null; }
+ get { return _value != null; }
}
///
@@ -90,21 +90,34 @@ namespace Umbraco.Core.ObjectResolution
///
///
/// value is set to null, but cannot be null (CanBeNull is false).
- /// value is read and is null, but cannot be null (CanBeNull is false).
+ /// value is read and is null, but cannot be null (CanBeNull is false),
+ /// or value is set (read) and resolution is (not) frozen.
protected TResolved Value
{
get
{
- if (!_canBeNull && _resolved == null)
- throw new InvalidOperationException("");
- return _resolved;
+ Resolution.EnsureIsFrozen();
+ using (new ReadLock(_lock))
+ {
+ if (!_canBeNull && _value == null)
+ throw new InvalidOperationException(string.Format(
+ "Resolver {0} requires a value, and none was supplied.", this.GetType().FullName));
+
+ return _value;
+ }
}
set
{
- if (!_canBeNull && value == null)
- throw new ArgumentNullException("value");
- _resolved = value;
+ using (Resolution.Configuration)
+ using (var l = new UpgradeableReadLock(_lock))
+ {
+ if (!_canBeNull && value == null)
+ throw new ArgumentNullException("value");
+
+ l.UpgradeToWriteLock();
+ _value = value;
+ }
}
}
}
diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj
index 7fa536d3f5..61a7e21275 100644
--- a/src/Umbraco.Core/Umbraco.Core.csproj
+++ b/src/Umbraco.Core/Umbraco.Core.csproj
@@ -440,7 +440,7 @@
-
+
@@ -605,7 +605,7 @@
-
+
diff --git a/src/Umbraco.Tests/CacheRefresherFactoryTests.cs b/src/Umbraco.Tests/CacheRefresherFactoryTests.cs
index 782638a1db..726bb1c9bc 100644
--- a/src/Umbraco.Tests/CacheRefresherFactoryTests.cs
+++ b/src/Umbraco.Tests/CacheRefresherFactoryTests.cs
@@ -35,7 +35,7 @@ namespace Umbraco.Tests
public void TearDown()
{
CacheRefreshersResolver.Reset();
- Resolution.IsFrozen = false;
+ Resolution.Unfreeze();
}
[Test]
diff --git a/src/Umbraco.Tests/CodeFirst/CodeFirstTests.cs b/src/Umbraco.Tests/CodeFirst/CodeFirstTests.cs
index a85138864f..d371f7e709 100644
--- a/src/Umbraco.Tests/CodeFirst/CodeFirstTests.cs
+++ b/src/Umbraco.Tests/CodeFirst/CodeFirstTests.cs
@@ -233,7 +233,7 @@ namespace Umbraco.Tests.CodeFirst
//reset the app context
DataTypesResolver.Reset();
ApplicationContext.Current = null;
- Resolution.IsFrozen = false;
+ Resolution.Unfreeze();
PluginManager.Current = null;
string path = TestHelper.CurrentAssemblyDirectory;
diff --git a/src/Umbraco.Tests/DataTypeFactoryTests.cs b/src/Umbraco.Tests/DataTypeFactoryTests.cs
index fadc45a843..734b0260c7 100644
--- a/src/Umbraco.Tests/DataTypeFactoryTests.cs
+++ b/src/Umbraco.Tests/DataTypeFactoryTests.cs
@@ -37,7 +37,7 @@ namespace Umbraco.Tests
public void TearDown()
{
DataTypesResolver.Reset();
- Resolution.IsFrozen = false;
+ Resolution.Unfreeze();
}
[Test]
diff --git a/src/Umbraco.Tests/Migrations/FindingMigrationsTest.cs b/src/Umbraco.Tests/Migrations/FindingMigrationsTest.cs
index 7601aa2f59..5ef819b962 100644
--- a/src/Umbraco.Tests/Migrations/FindingMigrationsTest.cs
+++ b/src/Umbraco.Tests/Migrations/FindingMigrationsTest.cs
@@ -75,7 +75,7 @@ namespace Umbraco.Tests.Migrations
public void TearDown()
{
MigrationResolver.Reset();
- Resolution.IsFrozen = false;
+ Resolution.Unfreeze();
}
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Tests/Migrations/TargetVersionSixthMigrationsTest.cs b/src/Umbraco.Tests/Migrations/TargetVersionSixthMigrationsTest.cs
index beb1d2058d..c56dbf55eb 100644
--- a/src/Umbraco.Tests/Migrations/TargetVersionSixthMigrationsTest.cs
+++ b/src/Umbraco.Tests/Migrations/TargetVersionSixthMigrationsTest.cs
@@ -70,7 +70,7 @@ namespace Umbraco.Tests.Migrations
public void TearDown()
{
MigrationResolver.Reset();
- Resolution.IsFrozen = false;
+ Resolution.Unfreeze();
}
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Tests/Migrations/Upgrades/BaseUpgradeTest.cs b/src/Umbraco.Tests/Migrations/Upgrades/BaseUpgradeTest.cs
index 326aa304c2..871ecf3c29 100644
--- a/src/Umbraco.Tests/Migrations/Upgrades/BaseUpgradeTest.cs
+++ b/src/Umbraco.Tests/Migrations/Upgrades/BaseUpgradeTest.cs
@@ -95,7 +95,7 @@ namespace Umbraco.Tests.Migrations.Upgrades
PluginManager.Current = null;
SyntaxConfig.SqlSyntaxProvider = null;
MigrationResolver.Reset();
- Resolution.IsFrozen = false;
+ Resolution.Unfreeze();
TestHelper.CleanContentDirectories();
diff --git a/src/Umbraco.Tests/Persistence/MySqlTableByTableTest.cs b/src/Umbraco.Tests/Persistence/MySqlTableByTableTest.cs
index 061a2414f6..80388d5c63 100644
--- a/src/Umbraco.Tests/Persistence/MySqlTableByTableTest.cs
+++ b/src/Umbraco.Tests/Persistence/MySqlTableByTableTest.cs
@@ -53,7 +53,7 @@ namespace Umbraco.Tests.Persistence
//reset the app context
ApplicationContext.Current = null;
- Resolution.IsFrozen = false;
+ Resolution.Unfreeze();
RepositoryResolver.Reset();
}
diff --git a/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs b/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs
index d2dadc6879..eab36ac329 100644
--- a/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs
+++ b/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs
@@ -68,7 +68,7 @@ namespace Umbraco.Tests.Persistence
//reset the app context
ApplicationContext.Current = null;
- Resolution.IsFrozen = false;
+ Resolution.Unfreeze();
RepositoryResolver.Reset();
}
diff --git a/src/Umbraco.Tests/Persistence/SqlTableByTableTest.cs b/src/Umbraco.Tests/Persistence/SqlTableByTableTest.cs
index 82097c487e..4c18b04b59 100644
--- a/src/Umbraco.Tests/Persistence/SqlTableByTableTest.cs
+++ b/src/Umbraco.Tests/Persistence/SqlTableByTableTest.cs
@@ -55,7 +55,7 @@ namespace Umbraco.Tests.Persistence
//reset the app context
ApplicationContext.Current = null;
- Resolution.IsFrozen = false;
+ Resolution.Unfreeze();
RepositoryResolver.Reset();
}
diff --git a/src/Umbraco.Tests/Publishing/PublishingStrategyTests.cs b/src/Umbraco.Tests/Publishing/PublishingStrategyTests.cs
index 7e9a6ede54..074265e78e 100644
--- a/src/Umbraco.Tests/Publishing/PublishingStrategyTests.cs
+++ b/src/Umbraco.Tests/Publishing/PublishingStrategyTests.cs
@@ -50,7 +50,7 @@ namespace Umbraco.Tests.Publishing
//reset the app context
DataTypesResolver.Reset();
ApplicationContext.Current = null;
- Resolution.IsFrozen = false;
+ Resolution.Unfreeze();
RepositoryResolver.Reset();
diff --git a/src/Umbraco.Tests/Resolvers/ActionsResolverTests.cs b/src/Umbraco.Tests/Resolvers/ActionsResolverTests.cs
index 391b0c6072..411abc3d20 100644
--- a/src/Umbraco.Tests/Resolvers/ActionsResolverTests.cs
+++ b/src/Umbraco.Tests/Resolvers/ActionsResolverTests.cs
@@ -36,7 +36,7 @@ namespace Umbraco.Tests.Resolvers
public void TearDown()
{
ActionsResolver.Reset();
- Resolution.IsFrozen = false;
+ Resolution.Unfreeze();
}
[Test]
diff --git a/src/Umbraco.Tests/Resolvers/LazyManyObjectResolverTests.cs b/src/Umbraco.Tests/Resolvers/LazyManyObjectResolverTests.cs
index 977ddee355..426df9109f 100644
--- a/src/Umbraco.Tests/Resolvers/LazyManyObjectResolverTests.cs
+++ b/src/Umbraco.Tests/Resolvers/LazyManyObjectResolverTests.cs
@@ -21,7 +21,7 @@ namespace Umbraco.Tests.Resolvers
[TearDown]
public void TearDown()
{
- Resolution.IsFrozen = false;
+ Resolution.Unfreeze();
}
[Test]
diff --git a/src/Umbraco.Tests/Resolvers/MacroFieldEditorsResolverTests.cs b/src/Umbraco.Tests/Resolvers/MacroFieldEditorsResolverTests.cs
index 5507400091..ad5992f122 100644
--- a/src/Umbraco.Tests/Resolvers/MacroFieldEditorsResolverTests.cs
+++ b/src/Umbraco.Tests/Resolvers/MacroFieldEditorsResolverTests.cs
@@ -3,6 +3,7 @@ using System.Linq;
using System.Web.UI;
using NUnit.Framework;
using Umbraco.Core;
+using Umbraco.Core.Macros;
using Umbraco.Core.ObjectResolution;
using Umbraco.Tests.TestHelpers;
using umbraco.interfaces;
@@ -36,7 +37,7 @@ namespace Umbraco.Tests.Resolvers
public void TearDown()
{
MacroFieldEditorsResolver.Reset();
- Resolution.IsFrozen = false;
+ Resolution.Unfreeze();
PluginManager.Current.AssembliesToScan = null;
}
diff --git a/src/Umbraco.Tests/Resolvers/ManyObjectResolverTests.cs b/src/Umbraco.Tests/Resolvers/ManyObjectResolverTests.cs
index 20f970384e..75a73f79ee 100644
--- a/src/Umbraco.Tests/Resolvers/ManyObjectResolverTests.cs
+++ b/src/Umbraco.Tests/Resolvers/ManyObjectResolverTests.cs
@@ -19,8 +19,8 @@ namespace Umbraco.Tests.Resolvers
[TearDown]
public void TearDown()
- {
- Resolution.IsFrozen = false;
+ {
+ Resolution.Unfreeze();
}
[Test]
diff --git a/src/Umbraco.Tests/Resolvers/PackageActionsResolverTests.cs b/src/Umbraco.Tests/Resolvers/PackageActionsResolverTests.cs
index b7b9d0a6fe..08077a29e3 100644
--- a/src/Umbraco.Tests/Resolvers/PackageActionsResolverTests.cs
+++ b/src/Umbraco.Tests/Resolvers/PackageActionsResolverTests.cs
@@ -36,7 +36,7 @@ namespace Umbraco.Tests.Resolvers
public void TearDown()
{
PackageActionsResolver.Reset();
- Resolution.IsFrozen = false;
+ Resolution.Unfreeze();
}
///
diff --git a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs
index ec3eea2570..9d22190b64 100644
--- a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs
+++ b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs
@@ -90,7 +90,7 @@ namespace Umbraco.Tests.TestHelpers
SqlCeContextGuardian.CloseBackgroundConnection();
ApplicationContext.Current = null;
- Resolution.IsFrozen = false;
+ Resolution.Unfreeze();
RepositoryResolver.Reset();
TestHelper.CleanContentDirectories();
diff --git a/src/Umbraco.Tests/TestHelpers/BaseDatabaseTest.cs b/src/Umbraco.Tests/TestHelpers/BaseDatabaseTest.cs
index 856bef3e86..05074391da 100644
--- a/src/Umbraco.Tests/TestHelpers/BaseDatabaseTest.cs
+++ b/src/Umbraco.Tests/TestHelpers/BaseDatabaseTest.cs
@@ -83,7 +83,7 @@ namespace Umbraco.Tests.TestHelpers
//reset the app context
ApplicationContext.Current = null;
- Resolution.IsFrozen = false;
+ Resolution.Unfreeze();
RepositoryResolver.Reset();
}
diff --git a/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs b/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs
index 5e4c9700f0..2bc1d2b3f5 100644
--- a/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs
+++ b/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs
@@ -102,7 +102,7 @@ namespace Umbraco.Tests.TestHelpers
ApplicationContext.Current = null;
- Resolution.IsFrozen = false;
+ Resolution.Unfreeze();
RepositoryResolver.Reset();
TestHelper.CleanContentDirectories();
@@ -122,7 +122,7 @@ namespace Umbraco.Tests.TestHelpers
//DatabaseContext.Database.Dispose();
//ApplicationContext.ApplicationCache.ClearAllCache();
//ApplicationContext.Current = null;
- //Resolution.IsFrozen = false;
+ //Resolution.Unfreeze();
//RepositoryResolver.Reset();
//if (RequiresDbSetup)
//{