From 373fdd324b0afe1c43f6eb90a8a99b7ced1ecf65 Mon Sep 17 00:00:00 2001 From: "shannon@ShandemVaio" Date: Fri, 27 Jul 2012 05:25:26 +0600 Subject: [PATCH] Fixes up ResolverBase and it's static lock object which isn't actually required because our singleton is a getter/setter and field access is thread safe. Updated SingleResolverBase to ensure that TResolved is a class so the null check works properly. --- src/Umbraco.Core/Resolving/ResolverBase.cs | 37 ++++--------------- .../Resolving/SingleResolverBase.cs | 3 +- 2 files changed, 9 insertions(+), 31 deletions(-) diff --git a/src/Umbraco.Core/Resolving/ResolverBase.cs b/src/Umbraco.Core/Resolving/ResolverBase.cs index d7a62860a8..2d27ac1f21 100644 --- a/src/Umbraco.Core/Resolving/ResolverBase.cs +++ b/src/Umbraco.Core/Resolving/ResolverBase.cs @@ -3,36 +3,13 @@ using System.Threading; namespace Umbraco.Core.Resolving { - internal abstract class ResolverBase where TResolver : class + /// + /// base class for resolvers which declare a singleton accessor + /// + /// + internal abstract class ResolverBase + where TResolver : class { - static TResolver _resolver; - - //TODO: This is not correct, this will be the same lock for all ResolverBase classes!! - static readonly ReaderWriterLockSlim ResolversLock = new ReaderWriterLockSlim(); - - public static TResolver Current - { - get - { - using (new ReadLock(ResolversLock)) - { - if (_resolver == null) - throw new InvalidOperationException("Current has not been initialized. You must initialize Current before trying to read it."); - return _resolver; - } - } - - set - { - using (new WriteLock(ResolversLock)) - { - if (value == null) - throw new ArgumentNullException("value"); - if (_resolver != null) - throw new InvalidOperationException("Current has already been initialized. It is not possible to re-initialize Current once it has been initialized."); - _resolver = value; - } - } - } + public static TResolver Current { get; set; } } } diff --git a/src/Umbraco.Core/Resolving/SingleResolverBase.cs b/src/Umbraco.Core/Resolving/SingleResolverBase.cs index 95cab6cf64..b57fc681d8 100644 --- a/src/Umbraco.Core/Resolving/SingleResolverBase.cs +++ b/src/Umbraco.Core/Resolving/SingleResolverBase.cs @@ -3,7 +3,8 @@ namespace Umbraco.Core.Resolving { internal abstract class SingleResolverBase : ResolverBase - where TResolver : class + where TResolver : class + where TResolved : class { TResolved _resolved; readonly bool _canBeNull;