using System.Collections.Generic; using System.Threading; namespace Umbraco.Core.Resolving { /// /// A Resolver to return and set a Multiply registered object. /// /// /// /// /// Used to resolve multiple types from a collection. The collection can also be modified at runtime/application startup. /// An example of this is MVCs ViewEngines collection /// internal abstract class MultipleResolverBase : ResolverBase where TResolver : class where TResolved : class { readonly List _resolved; protected readonly ReaderWriterLockSlim Lock = new ReaderWriterLockSlim(); protected MultipleResolverBase() { _resolved = new List(); } protected MultipleResolverBase(IEnumerable value) { _resolved = new List(value); } protected IEnumerable Values { get { return _resolved; } } public void Remove(TResolved item) { Resolution.EnsureNotFrozen(); using (new WriteLock(Lock)) { _resolved.Remove(item); } } public void Add(TResolved item) { Resolution.EnsureNotFrozen(); using (new WriteLock(Lock)) { _resolved.Add(item); } } public void Clear() { Resolution.EnsureNotFrozen(); using (new WriteLock(Lock)) { _resolved.Clear(); } } public void Insert(int index, TResolved item) { Resolution.EnsureNotFrozen(); using (new WriteLock(Lock)) { _resolved.Insert(index, item); } } } }